C# 重命名文件名and 创建文件夹、文件流


C# 重命名本地硬盘的文件名

1.先在项目中添加引用:Microsoft.VisualBasic  

然后在所需使用的文档中加上using Microsoft.VisualBasic.Devices; 命名空间

2.就下面两行                

Computer MyComputer = new Computer();                

MyComputer.FileSystem.RenameFile(FileName, newFileName);


其中FileName是你所要重命名的文件的全路径,newFileName仅仅是目标文件名;

 

创建文件夹

要实现的功能:在IIS服务器上创建文件夹,用来存放工厂生产的数据,文件夹目录按照UserData/DCCFile/year/mounth/filename的方式创建。当用户存文件的时候查找是否存在此文件夹,不存在的时候则先创建文件夹,然后进行上传文件。

实现逻辑:预先设定一个虚拟路径,用server.mappath()将文件要存放的相对路径映射到绝对路径,然后用Directory类在绝对路径中创建文件夹,然后将文件上传到此绝对路径中。

实现代码:

 string stryear = System.DateTime.Now.Year.ToString();

string strmonth = System.DateTime.Now.Month.ToString();

string path = Server.MapPath("~/UserData/DCCFile/"+stryear+"/"+strmonth+"/");//文件要上传到的虚拟路径

//path为经过映射的在本地磁盘上的绝对路径

if (!Directory.Exists(path))//判断这个绝对路径是否存在

{
                    Directory.CreateDirectory(path); //不存在文件夹时则创建文件夹
                }

FileUpload1.SaveAs(path+FileUpload1.FileName);//上传新文件

 

 文件下载:

    string filename="文件名";

           string serverpath = System.Web.HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath + "/UserData/DCCFile/" + stryear + "/" + strmonth + "/" + strSysFileNumber + "/");//MeThod1:从ISS服务器映射文件的绝对路径

           string serverpath=Server.MapPath("~/UserData/DCCFile/" + stryear + "/" + strmonth + "/" + strSysFileNumber + "/");//MeThod2:从ISS服务器映射文件的绝对路径
            string fileFullName = serverpath + filename;//文件的全名
            FileInfo file = new FileInfo(fileFullName);
            if (File.Exists(fileFullName))
            {
                //将文件下载到客户机
                Response.Clear();
                Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(file.Name));
                Response.ContentType = "application/octet-stream";
                Response.Filter.Close(); //Response.Filter 是一个 Stream 对象(表示字节序列的流),Response.Filter.CLose() 表示关闭此流对象并释放相关资源。
                Response.WriteFile(file.FullName);
                Response.End();
            }
            else
            {
                Page.ClientScript.RegisterStartupScript(GetType(), "alert", "<script language='javascript'>alert('下载失败!')</script>");
            }

 

说明:application/octet-stream 是一种MIME类型,表示可以实现任何格式的文件下载

Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。

我们在开发web系统时有时会有以下需求:
希望某类或者某已知MIME 类型的文件(比如:*.gif;*.txt;*.htm)能够在访问时弹出“文件下载”对话框
希望以原始文件名(上传时的文件名,例如:山东省政府1024号文件.doc)提供下载,但服务器上保存的地址却是其他文件名(如12519810948091234_asdf.doc)
希望某文件直接在浏览器上显示而不是弹出文件下载对话框

解决办法是 Response.AddHeader "content-disposition","attachment; filename=fname.ext"

将上述需求进行归我给出如下例子代码:
public static void ToDownload(string serverfilpath,string filename)
{
    FileStream fileStream = new FileStream(serverfilpath, FileMode.Open);
    long fileSize = fileStream.Length;
    HttpContext.Current.Response.ContentType = "application/octet-stream";
    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + UTF_FileName(filename) + "\";");
    attachment --- 作为附件下载
    inline --- 在线打开
    HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
    byte[] fileBuffer = new byte[fileSize];
    fileStream.Read(fileBuffer, 0, (int)fileSize);
    HttpContext.Current.Response.BinaryWrite(fileBuffer);
    fileStream.Close();
    HttpContext.Current.Response.End();
}

private static string UTF_FileName(string filename)
{
    return HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8);
}

UTF_FileName方法 主要为了解决包含非英文/数字名称的问题,比如说文件名为“衣明志.doc”,使用该方法客户端就不会出现 乱码了。作用同上面的Server.UrlEncode

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值