文件、文件夹、文件流操作

一、获取文件夹列表

   /// <summary>
   /// 获取文件夹下的文件列表
   /// </summary>
    /// <param name="Path">string Path:文件夹路径(@"C:\")</param>
    /// <param name="SearchPattern">string SearchPattern:扩展名过滤("*.txt")</param>
    /// <param name="SearchChild">bool SearchChild:为False不搜索子目录,为True搜索子目录</param>
   /// <returns></returns>

    public string[] GetFileList(string Path, string SearchPattern, bool SearchChild)
    {
        //判断文件夹是否存在
        if (Directory.Exists(Path)==false)
        {
        return null;
        }
        if (SearchChild){
        //搜索子目录
        return Directory.GetFiles(Path, SearchPattern, SearchOption.AllDirectories);
        }
        else
        {
            //不搜索子目录
            return Directory.GetFiles(Path, SearchPattern, SearchOption.TopDirectoryOnly);
        }
    }

二、打开文件

    /// <summary>
    /// 打开文件
    /// </summary>
    /// <param name="Path">string Path:文件路径</param>
    /// <returns></returns>
    public System.Diagnostics.Process OpenFile(string Path)
    {
        if (File.Exists(Path) == true)
        {//打开文件,默认用系统注册类型关联软件打开
            return System.Diagnostics.Process.Start(Path);
        }
        else
        {
            return null;
        }
    }

*可对打开的文件进行一些操作:

public System.Diagnostics.Process p1;

p1=OpenFile(@"c:\1.txt");

p1..Kill();//关闭打开的文件

p1.WaitForExit();//等待打开的文件关闭

p1.MainWindowTitle;//获取打开文件主窗口的标题

p1.HasExited;//判断打开的文件是否已关闭

三、获取文件信息

    /// <summary>
    /// 获取文件信息
    /// </summary>
    /// <param name="Path">string Path:文件路径</param>
    /// <returns></returns>
    public FileInfo GetFileInfo(string Path)
    {
        if (File.Exists(Path) == true)
        {
            return new FileInfo(Path);

        }
        else
        {
            return null;
        }
    }

*使用方法如下:

FileInfo fi1 = GetFileInfo(@"f:\1.txt");

fi1.Extension;//获取文件的扩展名

fi1.DirectoryName;//获取文件所在完整目录

fi1.Length;//获取文件的字节数

fi1.Name;//获取文件名,包括扩展名

fi1.Name.Replace(f1.Extension, "");//获取文件名,不包括扩展名

四、创建文件夹

    /// <summary>
    /// 创建文件夹
    /// </summary>
    /// <param name="Path">string Path:文件夹路径</param>
    /// <returns></returns>
    public bool CreateDir(string Path)
    {
        try
        {//判断文件夹是否存在
            if (Directory.Exists(Path) == false)
            {
                Directory.CreateDirectory(Path);
                return true;
            }
            else
            {
                return false;
            }
            
        }
        catch
        {
            return false;
        }
    }

五、用二进制数组生成文件
///
/// 用二进制数组Byte[]生成文件
///
/// string Path:要生成的文件全路径
/// byte[] StreamByte:要生成文件的二进制 Byte 数组
///
public bool ByteStreamToFile(string Path, byte[] StreamByte)
{
try
{//判断要创建的文件是否存在,若存在则先删除
if (File.Exists(Path) == true)
{
File.Delete(Path);
}
//创建文件流(打开或创建的方式)
FileStream FS = new FileStream(Path, FileMode.OpenOrCreate);
//把文件流写到文件中
FS.Write(StreamByte, 0, StreamByte.Length);
FS.Close();
return true;
}
catch
{
return false;
}
}

六、获取系统文件夹

Environment.GetFolderPath(Environment.SpecialFolder.Startup)

说明:

ApplicationData 目录,它用作当前漫游用户的应用程序特定数据的公共储存库。
CommonApplicationData 目录,它用作所有用户使用的应用程序特定数据的公共储存库。
CommonProgramFiles 用于应用程序间共享的组件的目录。
Cookies 用作 Internet Cookie 的公共储存库的目录。
Desktop 逻辑桌面,而不是物理文件系统位置。
DesktopDirectory 用于物理上存储桌面上的文件对象的目录。
Favorites 用作用户收藏夹项的公共储存库的目录。
History 用作 Internet 历史记录项的公共储存库的目录。
InternetCache 用作 Internet 临时文件的公共储存库的目录。
LocalApplicationData 目录,它用作当前非漫游用户使用的应用程序特定数据的公共储存库。
MyComputer “我的电脑”文件夹。
MyMusic “My Music”文件夹。
MyPictures “My Pictures”文件夹。
Personal 用作文档的公共储存库的目录。
ProgramFiles “Program files”目录。
Programs 包含用户程序组的目录。
Recent 包含用户最近使用过的文档的目录。
SendTo 包含“发送”菜单项的目录。
StartMenu 包含“开始”菜单项的目录。
Startup 对应于用户的“启动”程序组的目录。
System “System”目录。
Templates 用作文档模板的公共储存库的目录。
-------------------------------------------------------------------------------
文件流操作 之 删除、复制、转移多个文件

string[] format = { ".jpg", ".doc", ".exe", ".pdf", "*.xls" };

  1. 03.# 文件流操作 之 删除、复制、转移多个文件
  2.  /// <summary>  
  3.   /// 删除文件夹下面所有图片  
  4.   /// </summary>  
  5.   /// <param name="oldpngPath">待删除文件路径</param>  
  6.   /// <param name="newpngPath">删除到的新目录</param>  
  7.   /// <param name="geshi">操作文件的格式 例如:*.png、*.xml</param>  
  8.   public void deleteAll(string delpath, string format )  
  9.   {  
  10.       string[] files = Directory.GetFiles(delpath, format[0]);  
  11.       foreach (string file in files)  
  12.       {  
  13.           File.Delete(file);  
  14.       }  
  15.   }  
  16.   /// <summary>  
  17.   /// 复制文件夹下面所有图片  
  18.   /// </summary>  
  19.   /// <param name="oldpngPath">待复制文件路径</param>  
  20.   /// <param name="newpngPath">复制到的新目录</param>  
  21.   /// <param name="geshi">操作文件的格式 例如:*.png、*.xml</param>  
  22.   public void copyALl(string oldpngPath, string newpngPath, string format )  
  23.   {  
  24.       string[] files = Directory.GetFiles(oldpngPath, format[0]);  
  25.       foreach (string file in files)  
  26.       {  
  27.           string otherFile = Path.Combine(oldpngPath, Path.GetFileName(file));  
  28.           File.Copy(file, newpngPath + "\\" + Path.GetFileName(file));  
  29.       }  
  30.   }  
  31.  /// <summary>  
  32.   /// 移动文件夹下的所有文件  
  33.   /// </summary>  
  34.   /// <param name="olderpath">待移动的文件目录</param>  
  35.   /// <param name="topath">新目录</param>  
  36.   public void moveAll(string olderpath, string topath)  
  37.   {  
  38.       string[] files = Directory.GetFiles(delpath, format[0]);  
  39.       foreach (string file in files)  
  40.       {  
  41.           File.Move(file, topath); //移动文件  
  42.       }  
  43. }

    目录操作
    string[] drives = Directory.GetLogicalDrives(); //本地驱动器的名,如:C:\等

string path = Directory.GetCurrentDirectory(); //获取应用程序的当前工作目录

Path.GetFileName(@"c:\dir\file.txt"); //获取子目录的名字,result的结果是file.txt

Directory.GetFiles(路径及文件名) //获取指定目录中的文件名(文件列表)

DirectoryInfo di = new DirectoryInfo(@"f:\MyDir"); //构造函数创建目录

DirectoryInfo di=Directory.CreateDirectory(@"f:\bbs"); //创建对象并创建目录

if (di.Exists == false) //检查是否存在此目录

{  di.Create();  } //创建目录

DirectoryInfo dis = di.CreateSubdirectory("SubDir"); //以相对路径创建子目录

dis.Delete(true); //删除刚创建的子目录

di.Delete(true); //删除创建目录

文件操作:
Directory.Delete(@"f:\bbs2", true); //删除目录及其子目录和内容(如为假不能删除有内容的目录包括子目录)

Directory.GetDirectories 方法 //获取指定目录中子目录的名称

string[] dirs = Directory.GetDirectories(@"f:", "b*"); Console.WriteLine("此目录中以b开头的子目录共{0}个!", dirs.Length);

foreach (string dir in dirs) { Console.WriteLine(dir); }

Directory.GetFileSystemEntries //获取指定目录中的目录及文件名

Directory.GetLogicalDrives //检索此计算机上格式为“:”的逻辑驱动器的名称,【语法同上】

Directory.GetParent //用于检索父目录的路径。

DirectoryInfo a = Directory.GetParent(path);

Console.WriteLine(a.FullName);

Directory.Move //移动目录及其在内的所有文件

Directory.Move(@"f:\bbs\1", @"f:\bbs\2"); //将文件夹1内的文件剪到文件夹2内 文件夹2是刚创建的(即在程序执行的时候,文件夹2是不存在的)

文件流操作

// 对字节的读写操作(包含对异步操作的支持) Reading Writing Seeking
BinaryReader和BinaryWriter // 从字符串或原始数据到各种流之间的读写操作

FileStream类通过Seek()方法进行对文件的随机访问,默认为同步

TextReader和TextWriter //用于gb2312字符的输入和输出

StringReader和StringWriter //在字符串中读写字符

StreamReader和StreamWriter //在流中读写字符

BufferedStream 为诸如网络流的其它流添加缓冲的一种流类型.

MemoryStream 无缓冲的流

NetworkStream 互联网络上的流

编码转换

Encoding e1 = Encoding.Default; //取得本页默认代码

Byte[] bytes = e1.GetBytes("中国人民解放军"); //转为二进制

string str = Encoding.GetEncoding("UTF-8").GetString(bytes); //转回UTF-8编码

string srcFileName = @"D:/a.txt";
string destFileName = @"D:/b.txt";

        string srcFolderPath = @"D:/1";
        string destFolderPath = @"D:/6";
        
        //方法一  
        if (System.IO.File.Exists(srcFileName))
        {
            System.IO.File.Move(srcFileName, destFileName);
        }
        if (System.IO.Directory.Exists(srcFolderPath))
        {
            System.IO.Directory.Move(srcFolderPath, destFolderPath);
        }
        
        //方法二 
        if (System.IO.File.Exists(srcFileName))
        {
            System.IO.FileInfo file = new System.IO.FileInfo(srcFileName);
            file.MoveTo(destFileName);
        }
        if (System.IO.Directory.Exists(srcFolderPath))
        {
            System.IO.DirectoryInfo folder = new System.IO.DirectoryInfo(srcFolderPath);
            folder.MoveTo(destFolderPath);

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

转载于:https://www.cnblogs.com/bb-love-dd/p/5930296.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值