C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名
2012-12-14 15:32 清新风 阅读(20269) 评论(0) 收藏 举报本文也收集了目前最为常用的C#经典操作文件的方法,具体内容如下:C#追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件、指定文件夹下面的所有内容copy到目标文件夹下面、指定文件夹下面的所有内容Detele、读取文本文件、获取文件列表、读取日志文件、写入日志文件、创建HTML 文件、CreateDirectory方法的使用.修改文件或文件夹名称等方法使用.....
C#追加文件
    StreamWriter sw = 
File.AppendText(Server.MapPath(".")+"\\myText.txt");
    sw.WriteLine("追逐理想");
    sw.WriteLine("kzlll");
    sw.WriteLine(".NET笔记");
    sw.Flush();
    sw.Close();
C#拷贝文件
    string OrignFile,NewFile;
    OrignFile = 
Server.MapPath(".")+"\\myText.txt";
    NewFile = 
Server.MapPath(".")+"\\myTextCopy.txt";
    File.Copy(OrignFile,NewFile,true);
C#删除文件
    string delFile = 
Server.MapPath(".")+"\\myTextCopy.txt";
    File.Delete(delFile);
C#移动文件
    string OrignFile,NewFile;
    OrignFile = 
Server.MapPath(".")+"\\myText.txt";
    NewFile = 
Server.MapPath(".")+"\\myTextCopy.txt";
    File.Move(OrignFile,NewFile);
C#创建目录
// 创建目录c:\sixAge
    DirectoryInfo 
d=Directory.CreateDirectory("c:\\sixAge");
// 
d1指向c:\sixAge\sixAge1
    DirectoryInfo 
d1=d.CreateSubdirectory("sixAge1");
// 
d2指向c:\sixAge\sixAge1\sixAge1_1
    DirectoryInfo 
d2=d1.CreateSubdirectory("sixAge1_1");
// 
将当前目录设为c:\sixAge
    Directory.SetCurrentDirectory("c:\\sixAge");
// 
创建目录c:\sixAge\sixAge2
    Directory.CreateDirectory("sixAge2");
// 
创建目录c:\sixAge\sixAge2\sixAge2_1
    Directory.CreateDirectory("sixAge2\\sixAge2_1");
递归删除文件夹及文件
- 
〈%@PageLanguage=C#%〉 - 〈%@Importnamespace="System.IO"%〉
 - 〈Scriptrunat=server〉
 - publicvoidDeleteFolder(stringdir)
 - {
 - if(Directory.Exists(dir))//如果
 - 存在这个文件夹删除之
 - {
 - foreach(stringdinDirectory.
 - GetFileSystemEntries(dir))
 - {
 - if(File.Exists(d))
 - File.Delete(d);//直接删除其中的文件
 - else
 - DeleteFolder(d);//递归删除子文件夹
 - }
 - Directory.Delete(dir);//删除已空文件夹
 - Response.Write(dir+"文件夹删除成功");
 - }
 - else
 - Response.Write(dir+"该文件夹不存在");//如果
 - 文件夹不存在则提示
 - }
 - protectedvoidPage_Load(Object
 - sender,EventArgse)
 - {
 - stringDir="D:\\gbook\\11";
 - DeleteFolder(Dir);//调用函数删除文件夹
 - }
 - //========================================
 - //实现一个静态方法将指定文件夹下面的所有内容copy到目标文件夹下面
 - //如果目标文件夹为只读属性就会报错。
 - //========================================
 - publicstaticvoidCopyDir(stringsrcPath,
 - stringaimPath)
 - {
 - try
 - {
 - //检查目标目录是否以目录分割字
 - 符结束如果不是则添加之
 - if(aimPath[aimPath.Length-1]!= Path.DirectorySeparatorChar)
 - aimPath+=Path.DirectorySeparatorChar;
 - //判断目标目录是否存在如果不存在则新建之
 - if(!Directory.Exists(aimPath))Directory.CreateDirectory(aimPath);
 - //得到源目录的文件列表,
 - 该里面是包含文件以及目录路径的一个数组
 - //如果你指向copy目标文件下面的文件
 - 而不包含目录请使用下面的方法
 - //string[]fileList=Directory.GetFiles(srcPath);
 - string[]fileList=Directory.GetFileSystemEntries(srcPath);
 - //遍历所有的文件和目录
 - foreach(stringfileinfileList)
 - {
 - //先当作目录处理如果存在这个
 - 目录就递归Copy该目录下面的文件
 - if(Directory.Exists(file))
 - CopyDir(file,aimPath+Path.GetFileName(file));
 - //否则直接Copy文件
 - else
 - File.Copy(file,aimPath+Path.GetFileName(file),true);
 - }
 - }
 - catch(Exceptione)
 - {
 - MessageBox.Show(e.ToString());
 - }
 - }
 - //========================================
 - //实现一个静态方法将指定文件夹下面的所有内容Detele
 - //测试的时候要小心操作,删除之后无法恢复。
 - //========================================
 - publicstaticvoidDeleteDir(stringaimPath)
 - {
 - try
 - {
 - //检查目标目录是否以目录分割字
 - 符结束如果不是则添加之
 - if(aimPath[aimPath.Length-1]!=
 - Path.DirectorySeparatorChar)
 - aimPath+=Path.DirectorySeparatorChar;
 - //得到源目录的文件列表,
 - 该里面是包含文件以及目录路径的一个数组
 - //如果你指向Delete目标文件下面的
 - 文件而不包含目录请使用下面的方法
 - //string[]fileList=
 - Directory.GetFiles(aimPath);
 - string[]fileList=
 - Directory.GetFileSystemEntries(aimPath);
 - //遍历所有的文件和目录
 - foreach(stringfileinfileList)
 - {
 - //先当作目录处理如果存在这个
 - 目录就递归Delete该目录下面的文件
 - if(Directory.Exists(file))
 - {
 - DeleteDir(aimPath+Path.GetFileName(file));
 - }
 - //否则直接Delete文件
 - else
 - {
 - File.Delete(aimPath+Path.GetFileName(file));
 - }
 - }
 - //删除文件夹
 - System.IO.Directory.Delete(aimPath,true);
 - }
 - catch(Exceptione)
 - {
 - MessageBox.Show(e.ToString());
 - }
 - }
 - 需要引用命名空间:
 - usingSystem.IO;
 - ///〈summary〉
 - ///拷贝文件夹(包括子文件夹)到指定文件夹下,
 - 源文件夹和目标文件夹均需绝对路径.
 - 格式:CopyFolder(源文件夹,目标文件夹);
 - ///〈/summary〉
 - ///〈paramname="strFromPath"〉〈/param〉
 - ///〈paramname="strToPath"〉〈/param〉
 - //----------------------------------------
 -  
 - //----------------------------------------
 - publicstaticvoidCopyFolder(stringstrFromPath,
 - stringstrToPath)
 - {
 - //如果源文件夹不存在,则创建
 - if(!Directory.Exists(strFromPath))
 - {
 - Directory.CreateDirectory(strFromPath);
 - }
 - //取得要拷贝的文件夹名
 - stringstrFolderName=strFromPath.Substring(
 - strFromPath.LastIndexOf("\")+1,strFromPath.
 - Length-strFromPath.LastIndexOf("\")-1);
 - //如果目标文件夹中没有源文件夹则在目标文件夹中创建源文件夹
 - if(!Directory.Exists(strToPath+"\"
 - +strFolderName))
 - {
 - Directory.CreateDirectory(strToPath+"\"
 - +strFolderName);
 - }
 - //创建数组保存源文件夹下的文件名
 - string[]strFiles=Directory.GetFiles(strFromPath);
 - //循环拷贝文件
 - for(inti=0;i〈strFiles.Length;i++)
 - {
 - //取得拷贝的文件名,只取文件名,地址截掉。
 - stringstrFileName=strFiles[i].Substring(
 - strFiles[i].LastIndexOf("\")+1,
 - strFiles[i].Length-strFiles[i].
 - LastIndexOf("\")-1);
 - //开始拷贝文件,true表示覆盖同名文件
 - File.Copy(strFiles[i],strToPath+"\"
 - +strFolderName+"\"+strFileName,true);
 - }
 - //创建DirectoryInfo实例
 - DirectoryInfodirInfo=newDirectoryInfo(
 - strFromPath);
 - //取得源文件夹下的所有子文件夹名称
 - DirectoryInfo[]ZiPath=dirInfo.GetDirectories();
 - for(intj=0;j〈ZiPath.Length;j++)
 - {
 - //获取所有子文件夹名
 - stringstrZiPath=strFromPath+"\"+
 - ZiPath[j].ToString();
 - //把得到的子文件夹当成新的源文件夹,
 - 从头开始新一轮的拷贝
 - CopyFolder(strZiPath,strToPath+"\"+
 - strFolderName);
 - }
 - }
 - 
 
- 
 - 
 - C#文件操作:读取文本文件
 - 1/// 〈summary〉
 - 2/// 读取文本文件
 - 3/// 〈/summary〉
 - 4private void ReadFromTxtFile()
 - 5{
 - 6 if(filePath.PostedFile.
 - FileName != "")
 - 7 {
 - 8 txtFilePath =
 - filePath.PostedFile.FileName;
 - 9 fileExtName =
 - txtFilePath.Substring(txtFilePath.
 - LastIndexOf(".")+1,3);
 - 10
 - 11 if(fileExtName !="txt" &&
 - fileExtName != "TXT")
 - 12 {
 - 13 Response.Write("请选择文本文件");
 - 14 }
 - 15 else
 - 16 {
 - 17 StreamReader fileStream =
 - new StreamReader(txtFilePath,Encoding.Default);
 - 18 txtContent.Text = fileStream.ReadToEnd();
 - 19 fileStream.Close();
 - 20 }
 - 21 }
 - 22 }
 - C#文件操作:获取文件列表
 - 1/// 〈summary〉
 - 2/// 获取文件列表
 - 3/// 〈/summary〉
 - 4private void GetFileList()
 - 5{
 - 6 string strCurDir,FileName,FileExt;
 - 7
 - 8 ///文件大小
 - 9 long FileSize;
 - 10
 - 11 ///最后修改时间;
 - 12 DateTime FileModify;
 - 13
 - 14 ///初始化
 - 15 if(!IsPostBack)
 - 16 {
 - 17 ///初始化时,默认为当前页面所在的目录
 - 18 strCurDir = Server.MapPath(".");
 - 19 lblCurDir.Text = strCurDir;
 - 20 txtCurDir.Text = strCurDir;
 - 21 }
 - 22 else
 - 23 {
 - 24 strCurDir = txtCurDir.Text;
 - 25 txtCurDir.Text = strCurDir;
 - 26 lblCurDir.Text = strCurDir;
 - 27 }
 - 28 FileInfo fi;
 - 29 DirectoryInfo dir;
 - 30 TableCell td;
 - 31 TableRow tr;
 - 32 tr = new TableRow();
 - 33
 - 34 ///动态添加单元格内容
 - 35 td = new TableCell();
 - 36 td.Controls.Add(new LiteralControl(
 - "文件名"));
 - 37 tr.Cells.Add(td);
 - 38 td = new TableCell();
 - 39 td.Controls.Add(new LiteralControl( "文件类型"));
 - 40 tr.Cells.Add(td);
 - 41 td = new TableCell();
 - 42 td.Controls.Add(new LiteralControl( "文件大小"));
 - 43 tr.Cells.Add(td);
 - 44 td = new TableCell();
 - 45 td.Controls.Add(new LiteralControl( "最后修改时间"));
 - 46 tr.Cells.Add(td);
 - 47
 - 48 tableDirInfo.Rows.Add(tr);
 - 49
 - 50 ///针对当前目录建立目录引用对象
 - 51 DirectoryInfo dirInfo = new DirectoryInfo( txtCurDir.Text);
 - 52
 - 53 ///循环判断当前目录下的文件和目录
 - 54 foreach(FileSystemInfo fsi in dirInfo.
 - GetFileSystemInfos())
 - 55 {
 - 56 FileName = "";
 - 57 FileExt = "";
 - 58 FileSize = 0;
 - 59
 - 60 ///如果是文件
 - 61 if(fsi is FileInfo)
 - 62 {
 - 63 fi = (FileInfo)fsi;
 - 64
 - 65 ///取得文件名
 - 66 FileName = fi.Name;
 - 67
 - 68 ///取得文件的扩展名
 - 69 FileExt = fi.Extension;
 - 70
 - 71 ///取得文件的大小
 - 72 FileSize = fi.Length;
 - 73
 - 74 ///取得文件的最后修改时间
 - 75 FileModify = fi.LastWriteTime;
 - 76 }
 - 77
 - 78 ///否则是目录
 - 79 else
 - 80 {
 - 81 dir = (DirectoryInfo)fsi;
 - 82
 - 83 ///取得目录名
 - 84 FileName = dir.Name;
 - 85
 - 86 ///取得目录的最后修改时间
 - 87 FileModify = dir.LastWriteTime;
 - 88
 - 89 ///设置文件的扩展名为"文件夹"
 - 90 FileExt = "文件夹";
 - 91 }
 - 92
 - 93 ///动态添加表格内容
 - 94 tr = new TableRow();
 - 95 td = new TableCell();
 - 96 td.Controls.Add(new LiteralControl( FileName));
 - 97 tr.Cells.Add(td);
 - 98 td = new TableCell();
 - 99 td.Controls.Add(new LiteralControl( FileExt));
 - 100 tr.Cells.Add(td);
 - 101 td = new TableCell();
 - 102 td.Controls.Add(new LiteralControl( FileSize.ToString()+"字节"));
 - 103 tr.Cells.Add(td);
 - 104 td = new TableCell();
 - 105 td.Controls.Add(new LiteralControl( FileModify.ToString("yyyy-mm-dd hh:mm:ss")));
 - 106 tr.Cells.Add(td);
 - 107 tableDirInfo.Rows.Add(tr);
 - 108 }
 - 109}
 - C#文件操作:读取日志文件
 - 1/// 〈summary〉
 - 2/// 读取日志文件
 - 3/// 〈/summary〉
 - 4private void ReadLogFile()
 - 5{
 - 6 ///从指定的目录以打 开或者创建的形式读取日志文件
 - 7 FileStream fs =
 - new FileStream(Server.MapPath("upedFile"
 - )+"\\logfile.txt", FileMode.OpenOrCreate,
 - FileAccess.Read);
 - 8
 - 9 ///定义输出字符串
 - 10 StringBuilder output = new StringBuilder();
 - 11
 - 12 ///初始化该字符串的长度为0
 - 13 output.Length = 0;
 - 14
 - 15 ///为上面创建的文件流创建读取数据流
 - 16 StreamReader read = new StreamReader(fs);
 - 17
 - 18 ///设置当前流的起始位置为文件流的起始点
 - 19 read.BaseStream.Seek(0, SeekOrigin.Begin);
 - 20
 - 21 ///读取文件
 - 22 while (read.Peek() 〉 -1)
 - 23 {
 - 24 ///取文件的一行内容并换行
 - 25 output.Append(read.ReadLine() + "\n");
 - 26 }
 - 27
 - 28 ///关闭释放读数据流
 - 29 read.Close();
 - 30
 - 31 ///返回读到的日志文件内容
 - 32 return output.ToString();
 - }
 - 
 - 
 - C#文件操作:写入日志文件
 - 1/// 〈summary〉
 - 2/// 写入日志文件
 - 3/// 〈/summary〉
 - 4/// 〈param name="input"〉〈/param〉
 - 5private void WriteLogFile(string input)
 - 6{
 - 7 ///指定日志文件的目录
 - 8 string fname = Server.MapPath("upedFile") + "\\logfile.txt";
 - 9 ///定义文件信息对象
 - 10 FileInfo finfo = new FileInfo(fname);
 - 11
 - 12 ///判断文件是否存在以及是否大于2K
 - 13 if ( finfo.Exists && finfo.Length 〉 2048 )
 - 14 {
 - 15 ///删除该文件
 - 16 finfo.Delete();
 - 17 }
 - 18 ///创建只写文件流
 - 19 using(FileStream fs = finfo.OpenWrite())
 - 20 {
 - 21 ///根据上面创建的文件流创建写数据流
 - 22 StreamWriter w = new StreamWriter(fs);
 - 23
 - 24 ///设置写数据流的起始位置为文件流的末尾
 - 25 w.BaseStream.Seek(0, SeekOrigin.End);
 - 26
 - 27 ///写入“Log Entry : ”
 - 28 w.Write("\nLog Entry : ");
 - 29
 - 30 ///写入当前系统时间并换行
 - 31 w.Write("{0} {1} \r\n", DateTime.Now.
 - ToLongTimeString(),
 - 32 DateTime.Now.ToLongDateString());
 - 33
 - 34 ///写入日志内容并换行
 - 35 w.Write(input + "\n");
 - 36
 - 37 ///写入----------------“并换行
 - 38 w.Write("------------------\n");
 - 39
 - 40 ///清空缓冲区内容,并把缓冲区内容写入基础流
 - 41 w.Flush();
 - 42
 - 43 ///关闭写数据流
 - 44 w.Close();
 - 45 }
 - 46}
 - C#文件操作:创建HTML文件
 - 1/// 〈summary〉
 - 2/// 创建HTML文件
 - 3/// 〈/summary〉
 - 4private void CreateHtmlFile()
 - 5{
 - 6 ///定义和html标记数目一致的数组
 - 7 string[] newContent = new string[5];
 - 8 StringBuilder strhtml =
 - new StringBuilder();
 - 9 try
 - 10 {
 - 11 ///创建StreamReader对象
 - 12 using (StreamReader sr =
 - new StreamReader(Server.MapPath("createHTML") + "\\template.html"))
 - 13 {
 - 14 String oneline;
 - 15
 - 16 ///读取指定的HTML文件模板
 - 17 while ((oneline = sr.ReadLine())
 - != null)
 - 18 {
 - 19 strhtml.Append(oneline);
 - 20 }
 - 21 sr.Close();
 - 22 }
 - 23 }
 - 24 catch(Exception err)
 - 25 {
 - 26 ///输出异常信息
 - 27 Response.Write(err.ToString());
 - 28 }
 - 29 ///为标记数组赋值
 - 30 newContent[0] = txtTitle.Text;//标题
 - 31 newContent[1] = "BackColor='#cccfff'";//背景色
 - 32 newContent[2] = "#ff0000";//字体颜色
 - 33 newContent[3] = "100px";//字体大小
 - 34 newContent[4] = txtContent.Text;//主要内容
 - 35
 - 36 ///根据上面新的内容生成html文件
 - 37 try
 - 38 {
 - 39 ///指定要生成的HTML文件
 - 40 string fname = Server.MapPath( "createHTML") +"\" + DateTime.Now.ToString(
 - "yyyymmddhhmmss") + ".html";
 - 41
 - 42 ///替换html模版文件里的标记为新的内容
 - 43 for(int i=0;i 〈 5;i++)
 - 44 {
 - 45 strhtml.Replace("$htmlkey["+i+"]",newContent[i]);
 - 46 }
 - 47 ///创建文件信息对象
 - 48 FileInfo finfo = new FileInfo(fname);
 - 49
 - 50 ///以打开或者写入的形式创建文件流
 - 51 using(FileStream fs = finfo.OpenWrite())
 - 52 {
 - 53 ///根据上面创建的文件流创建写数据流
 - 54 StreamWriter sw = new StreamWriter(fs,System.
 - Text.Encoding.GetEncoding("GB2312"));
 - 55
 - 56 ///把新的内容写到创建的HTML页面中
 - 57 sw.WriteLine(strhtml);
 - 58 sw.Flush();
 - 59 sw.Close();
 - 60 }
 - 61
 - 62 ///设置超级链接的属性
 - 63 hyCreateFile.Text = DateTime.Now.ToString("yyyymmddhhmmss")+".html";
 - 64 hyCreateFile.NavigateUrl = "
 - createHTML/"+DateTime.Now.ToString(" yyyymmddhhmmss")+".html";65 }
 - 66 catch(Exception err)
 - 67 {
 - 68 Response.Write (err.ToString());
 - 69 }
 - }
 
CreateDirectory方法的使用
using System;
using 
System.IO;
class Test
{
  public static void 
Main()
  {
    // Specify the directory you want to 
manipulate.
    string path = 
@"c:\MyDir";
    try
    {
      // Determine whether the directory 
exists.
      if 
(Directory.Exists(path))
      {
        Console.WriteLine("That path 
exists already.");
        return;
      }
      // Try to create 
the directory.
      DirectoryInfo di = 
Directory.CreateDirectory(path);
      Console.WriteLine("The directory was 
created successfully at {0}.", Directory.GetCreationTime(path));
      // 
Delete the directory.
      di.Delete();
      Console.WriteLine("The 
directory was deleted successfully.");
    }
    catch (Exception 
e)
    {
      Console.WriteLine("The process failed: {0}", 
e.ToString());
    }
    finally {}
  }
}
C#修改文件或文件夹名称
参考文档,做了个demo,move()方法其实就是重命名的;另外,使用DirectoryInfo中的moveto也是可以实现的。
sourceCode:
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);
}
                    
                
                
            
        
浙公网安备 33010602011771号