蜜蜂花园

导航

c#文件操作

目录操作

System.IO 类

目录操作
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是刚创建的
 

Stream // 对字节的读写操作(包含对异步操作的支持) 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编码

 




//文本文件操作:创建/读取/拷贝/删除
using System;
using System.IO;
class Test
{
   string path = @"f:\t.txt";
   public static void Main()
   {       
      //创建并写入(将覆盖已有文件)
      if (!File.Exists(path))
      {         
         using (StreamWriter sw = File.CreateText(path))
         {
            sw.WriteLine("Hello");
         }
      }
      //读取文件
      using (StreamReader sr = File.OpenText(path))
      {
        string s = "";
        while ((s = sr.ReadLine()) != null)
        {
           Console.WriteLine(s);
        }
     }
     //删除/拷贝
     try
     {
        File.Delete(path);
        File.Copy(path, @"f:\tt.txt");
     }
     catch (Exception e)
     {
        Console.WriteLine("The process failed: {0}", e.ToString());
     }
   }
}


//流文件操作
private const string name = "Test.data";
public static void Main(String[] args)
{
    //打开文件()  ,或通过File创建立如:fs = File.Create(path, 1024)
    FileStream fs = new FileStream(name, FileMode.CreateNew);
    //转换为字节 写入数据(可写入中文)
    Byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
    //字节数组,字节偏移量,最多写入的字节数
    fs.Write(info, 0, info.Length);
    w.Close();
    fs.Close();
    //打开文件
    fs = new FileStream(name, FileMode.Open, FileAccess.Read);
    //读取
    BinaryReader r = new BinaryReader(fs);
    for (int i = 0; i < 11; i++)
    {
        Console.WriteLine(r.ReadInt32());
    }
    w.Close();
    fs.Close();
}

C#文件操作类
2007-08-10 09:10
using System;
using System.IO;
using System.Text;
using System.Data;

namespace DbConvert
{
 
/**********************************************************************************
*
* 功能说明:文件操作类
* 作者:
* 版本:
*
* *******************************************************************************/

     /// <summary>
     /// 文件操作类
     /// </summary>
     public class FileObj : IDisposable
     {
         private bool _alreadyDispose = false;

         #region 构造函数
         public FileObj()
         {
             //
             // TODO: 在此处添加构造函数逻辑
             //
         }
         ~FileObj()
         {
             Dispose(); ;
         }

         protected virtual void Dispose(bool isDisposing)
         {
             if (_alreadyDispose) return;
             //if (isDisposing)
             //{
             //     if (xml != null)
             //     {
             //         xml = null;
             //     }
             //}
             _alreadyDispose = true;
         }
         #endregion

         #region IDisposable 成员

         public void Dispose()
         {
             Dispose(true);
             GC.SuppressFinalize(this);
         }

         #endregion

         #region 取得文件后缀名
         /****************************************
          * 函数名称:GetPostfixStr
          * 功能说明:取得文件后缀名
          * 参     数:filename:文件名称
          * 调用示列:
          *            string filename = "aaa.aspx";       
          *            string s = EC.FileObj.GetPostfixStr(filename);        
         *****************************************/
         /// <summary>
         /// 取后缀名
         /// </summary>
         /// <param name="filename">文件名</param>
         /// <returns>.gif|.html格式</returns>
         public static string GetPostfixStr(string filename)
         {
             int start = filename.LastIndexOf(".");
             int length = filename.Length;
             string postfix = filename.Substring(start, length - start);
             return postfix;
         }
         #endregion

         #region 写文件
         /****************************************
          * 函数名称:WriteFile
          * 功能说明:写文件,会覆盖掉以前的内容
          * 参     数:Path:文件路径,Strings:文本内容
          * 调用示列:
          *            string Path = Server.MapPath("Default2.aspx");      
          *            string Strings = "这是我写的内容啊";
          *            EC.FileObj.WriteFile(Path,Strings);
         *****************************************/
         /// <summary>
         /// 写文件
         /// </summary>
         /// <param name="Path">文件路径</param>
         /// <param name="Strings">文件内容</param>
         public static void WriteFile(string Path, string Strings)
         {
             if (!System.IO.File.Exists(Path))
             {
                 System.IO.FileStream f = System.IO.File.Create(Path);
                 f.Close();
             }
             System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, false, System.Text.Encoding.GetEncoding("gb2312"));
             f2.Write(Strings);
             f2.Close();
             f2.Dispose();
         }
         #endregion

         #region 读文件
         /****************************************
          * 函数名称:ReadFile
          * 功能说明:读取文本内容
          * 参     数:Path:文件路径
          * 调用示列:
          *            string Path = Server.MapPath("Default2.aspx");      
          *            string s = EC.FileObj.ReadFile(Path);
         *****************************************/
         /// <summary>
         /// 读文件
         /// </summary>
         /// <param name="Path">文件路径</param>
         /// <returns></returns>
         public static string ReadFile(string Path)
         {
             string s = "";
             if (!System.IO.File.Exists(Path))
                 s = "不存在相应的目录";
             else
             {
                 StreamReader f2 = new StreamReader(Path, System.Text.Encoding.GetEncoding("gb2312"));
                 s = f2.ReadToEnd();
                 f2.Close();
                 f2.Dispose();
             }

             return s;
         }
         #endregion

         #region 追加文件
         /****************************************
          * 函数名称:FileAdd
          * 功能说明:追加文件内容
          * 参     数:Path:文件路径,strings:内容
          * 调用示列:
          *            string Path = Server.MapPath("Default2.aspx");    
          *            string Strings = "新追加内容";
          *            EC.FileObj.FileAdd(Path, Strings);
         *****************************************/
         /// <summary>
         /// 追加文件
         /// </summary>
         /// <param name="Path">文件路径</param>
         /// <param name="strings">内容</param>
         public static void FileAdd(string Path, string strings)
         {
             StreamWriter sw = File.AppendText(Path);
             sw.Write(strings);
             sw.Flush();
             sw.Close();
         }
         #endregion

         #region 拷贝文件
         /****************************************
          * 函数名称:FileCoppy
          * 功能说明:拷贝文件
          * 参     数:OrignFile:原始文件,NewFile:新文件路径
          * 调用示列:
          *            string orignFile = Server.MapPath("Default2.aspx");    
          *            string NewFile = Server.MapPath("Default3.aspx");
          *            EC.FileObj.FileCoppy(OrignFile, NewFile);
         *****************************************/
         /// <summary>
         /// 拷贝文件
         /// </summary>
         /// <param name="OrignFile">原始文件</param>
         /// <param name="NewFile">新文件路径</param>
         public static void FileCoppy(string orignFile, string NewFile)
         {
             File.Copy(orignFile, NewFile, true);
         }

         #endregion

         #region 删除文件
         /****************************************
          * 函数名称:FileDel
          * 功能说明:删除文件
          * 参     数:Path:文件路径
          * 调用示列:
          *            string Path = Server.MapPath("Default3.aspx");   
          *            EC.FileObj.FileDel(Path);
         *****************************************/
         /// <summary>
         /// 删除文件
         /// </summary>
         /// <param name="Path">路径</param>
         public static void FileDel(string Path)
         {
             File.Delete(Path);
         }
         #endregion

         #region 移动文件
         /****************************************
          * 函数名称:FileMove
          * 功能说明:移动文件
          * 参     数:OrignFile:原始路径,NewFile:新文件路径
          * 调用示列:
          *             string orignFile = Server.MapPath("../说明.txt");   
          *             string NewFile = Server.MapPath("http://www.cnblogs.com/说明.txt");
          *             EC.FileObj.FileMove(OrignFile, NewFile);
         *****************************************/
         /// <summary>
         /// 移动文件
         /// </summary>
         /// <param name="OrignFile">原始路径</param>
         /// <param name="NewFile">新路径</param>
         public static void FileMove(string orignFile, string NewFile)
         {
             File.Move(orignFile, NewFile);
         }
         #endregion

         #region 在当前目录下创建目录
         /****************************************
          * 函数名称:FolderCreate
          * 功能说明:在当前目录下创建目录
          * 参     数:OrignFolder:当前目录,NewFloder:新目录
          * 调用示列:
          *            string orignFolder = Server.MapPath("test/");   
          *            string NewFloder = "new";
          *            EC.FileObj.FolderCreate(OrignFolder, NewFloder);
         *****************************************/
         /// <summary>
         /// 在当前目录下创建目录
         /// </summary>
         /// <param name="OrignFolder">当前目录</param>
         /// <param name="NewFloder">新目录</param>
         public static void FolderCreate(string orignFolder, string NewFloder)
         {
             Directory.SetCurrentDirectory(orignFolder);
             Directory.CreateDirectory(NewFloder);
         }
         #endregion

         #region 递归删除文件夹目录及文件
         /****************************************
          * 函数名称:DeleteFolder
          * 功能说明:递归删除文件夹目录及文件
          * 参     数:dir:文件夹路径
          * 调用示列:
          *            string dir = Server.MapPath("test/"); 
          *            EC.FileObj.DeleteFolder(dir);      
         *****************************************/
         /// <summary>
         /// 递归删除文件夹目录及文件
         /// </summary>
         /// <param name="dir"></param>
         /// <returns></returns>
         public static void DeleteFolder(string dir)
         {
             if (Directory.Exists(dir)) //如果存在这个文件夹删除之
             {
                 foreach (string d in Directory.GetFileSystemEntries(dir))
                 {
                     if (File.Exists(d))
                         File.Delete(d); //直接删除其中的文件
                     else
                         DeleteFolder(d); //递归删除子文件夹
                 }
                 Directory.Delete(dir); //删除已空文件夹
             }

         }

         #endregion

         #region 将指定文件夹下面的所有内容copy到目标文件夹下面 果目标文件夹为只读属性就会报错。
         /****************************************
          * 函数名称:CopyDir
          * 功能说明:将指定文件夹下面的所有内容copy到目标文件夹下面 果目标文件夹为只读属性就会报错。
          * 参     数:srcPath:原始路径,aimPath:目标文件夹
          * 调用示列:
          *            string srcPath = Server.MapPath("test/"); 
          *            string aimPath = Server.MapPath("test1/");
          *            EC.FileObj.CopyDir(srcPath,aimPath);  
         *****************************************/
         /// <summary>
         /// 指定文件夹下面的所有内容copy到目标文件夹下面
         /// </summary>
         /// <param name="srcPath">原始路径</param>
         /// <param name="aimPath">目标文件夹</param>
         public static void CopyDir(string srcPath, string aimPath)
         {
             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 (string file in fileList)
                 {
                     //先当作目录处理如果存在这个目录就递归Copy该目录下面的文件

                     if (Directory.Exists(file))
                         CopyDir(file, aimPath + Path.GetFileName(file));
                     //否则直接Copy文件
                     else
                         File.Copy(file, aimPath + Path.GetFileName(file), true);
                 }

             }
             catch (Exception ee)
             {
                 throw new Exception(ee.ToString());
             }
         }


         #endregion


     }

 

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");

递归删除文件夹及文件
<%@ Page Language=C#%>
<%@ Import namespace="System.IO"%>
<Script runat=server>
public void DeleteFolder(string dir)
{
    if (Directory.Exists(dir)) //如果存在这个文件夹删除之
    {
        foreach(string d in Directory.GetFileSystemEntries(dir))
        {
            if(File.Exists(d))
                File.Delete(d); //直接删除其中的文件
            else
                DeleteFolder(d); //递归删除子文件夹
        }
        Directory.Delete(dir); //删除已空文件夹
        Response.Write(dir+" 文件夹删除成功");
    }
    else
        Response.Write(dir+" 该文件夹不存在"); //如果文件夹不存在则提示
}

protected void Page_Load (Object sender ,EventArgs e)
{
    string Dir="D:\\gbook\\11";
    DeleteFolder(Dir); //调用函数删除文件夹
}

 
// ======================================================
  // 实现一个静态方法将指定文件夹下面的所有内容copy到目标文件夹下面
  // 如果目标文件夹为只读属性就会报错。
  // April 18April2005 In STU
  // ======================================================
  public static void CopyDir(string srcPath,string aimPath)
  {
   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(string file in fileList)
    {
     // 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件
     if(Directory.Exists(file))
      CopyDir(file,aimPath+Path.GetFileName(file));
      // 否则直接Copy文件
     else
      File.Copy(file,aimPath+Path.GetFileName(file),true);
    }
   }
   catch (Exception e)
   {
    MessageBox.Show (e.ToString());
   }
  }

  // ======================================================
  // 实现一个静态方法将指定文件夹下面的所有内容Detele
  // 测试的时候要小心操作,删除之后无法恢复。
  // April 18April2005 In STU
  // ======================================================
  public static void DeleteDir(string aimPath)
  {
   try
   {
    // 检查目标目录是否以目录分割字符结束如果不是则添加之
    if(aimPath[aimPath.Length-1] != Path.DirectorySeparatorChar)
     aimPath += Path.DirectorySeparatorChar;
    // 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组
    // 如果你指向Delete目标文件下面的文件而不包含目录请使用下面的方法
    // string[] fileList = Directory.GetFiles(aimPath);
    string[] fileList = Directory.GetFileSystemEntries(aimPath);
    // 遍历所有的文件和目录
    foreach(string file in fileList)
    {
     // 先当作目录处理如果存在这个目录就递归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 (Exception e)
   {
    MessageBox.Show (e.ToString());
   }
  }
 

 

需要引用命名空间:
using System.IO;

/**//// <summary>
  /// 拷贝文件夹(包括子文件夹)到指定文件夹下,源文件夹和目标文件夹均需绝对路径. 格式: CopyFolder(源文件夹,目标文件夹);
  /// </summary>
  /// <param name="strFromPath"></param>
  /// <param name="strToPath"></param>

  //--------------------------------------------------
  //作者:明天去要饭  QQ:305725744
 //---------------------------------------------------

  public static void CopyFolder(string strFromPath,string strToPath)
  {
   //如果源文件夹不存在,则创建
   if (!Directory.Exists(strFromPath))
   {   
    Directory.CreateDirectory(strFromPath);
   }  

   //取得要拷贝的文件夹名
   string strFolderName = 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(int i = 0;i < strFiles.Length;i++)
   {
    //取得拷贝的文件名,只取文件名,地址截掉。
    string strFileName = strFiles[i].Substring(strFiles[i].LastIndexOf("\\") + 1,strFiles[i].Length - strFiles[i].LastIndexOf("\\") - 1);
    //开始拷贝文件,true表示覆盖同名文件
    File.Copy(strFiles[i],strToPath + "\\" + strFolderName + "\\" + strFileName,true);
   }
 
   //创建DirectoryInfo实例
   DirectoryInfo dirInfo = new DirectoryInfo(strFromPath);
   //取得源文件夹下的所有子文件夹名称
   DirectoryInfo[] ZiPath = dirInfo.GetDirectories();
   for (int j = 0;j < ZiPath.Length;j++)
   {
    //获取所有子文件夹名
    string strZiPath = strFromPath + "\\" + ZiPath[j].ToString();  
    //把得到的子文件夹当成新的源文件夹,从头开始新一轮的拷贝
    CopyFolder(strZiPath,strToPath + "\\" + strFolderName);
   }
  }

posted on 2010-12-26 17:13  蜜蜂花园  阅读(211)  评论(0编辑  收藏  举报