文件,文件夹,文件流,日志文件写入记事本

对于文件和文件夹的操作都很简答,由于他们都有静态方法,所以使用起来很方便,下面直接贴方法吧,一看便知

一、文件操作:File类(FileInfo类是用来定义文件属性)

方 法         说 明
Copy()    将文件从源位置复制到目标位置
Create()  在指定的路径上创建文件
Delete()  删除文件
Open()    返回指定路径上的FileStream对象
Move()    将指定的文件移动到新位置。可以在新位置为文件指定不同的名称

二、文件夹操作:Directory类(DirectoryInfo使用来定义文件夹属性)

方 法                                     说 明
CreateDirectory()                  创建具有指定路径的目录
Delete()                删除指定的目录及其中的所有文件
GetDirectories()            返回表示指定目录下的目录名的string对象数组
EnumerateDirectories()         与GetDirectories()类似,但返回IEnumerable<string>集合
GetFiles()               返回在指定目录中的文件名的string对象数组
EnumerateFiles()          与GetFiles()类似,但返回文件名的IEnumerable<string>集合
GetFileSystemEntries()         返回在指定目录中的文件和目录名的string对象数组
EnumerateFileSystemEntries()  与GetFileSystemEntries()类似,但返回文件和目录名的IEnumerable<string>集合
Move()            将指定的目录移到新位置。可以在新位置为文件夹指定一个新名称

三、下面讲最重要的部分文件流<Stream>

在众多stream中功能最全面的要数FileStream,then what is fileStream

FileStream对象表示在磁盘或网络路径上指向文件的流。这个类提供了在文件中读写字节的
法,但经常使用StreamReader或StreamWriter执行这些功能。这是因为FileStream类操作的是字
和字节数组,而Stream类操作的是字符数据。字符数据易于使用,但是有些操作,如随机文件访
(访问文件中间某点的数据),就必须由FileStream执行,稍后对此进行介绍。
还有几种方法可以创建FileStream对象。构造函数具有许多不同的重载版本,最简单的构造
数仅有两个参数,即文件名和FileMode枚举值。
FileStream aFile = new FileStream(filename, FileMode.<Member>);

FileMode枚举包含几个成员,指定了如何打开或创建文件。稍后介绍这些枚举成员。另一个常
用的构造函数如下:
FileStream aFile = new FileStream(filename, FileMode.<Member>, FileAccess.<Member>);
第三个参数是FileAccess枚举的一个成员,它指定了流的作用。FileAccess枚举的成员如下所示。

成 员                  说 明
Read             打开文件,用于只读
Write            打开文件,用于只写
ReadWrite     打开文件,用于读写

 对文件进行非FileAccess枚举成员指定的操作会导致抛出异常。此属性的作用是,基于用户的
身份验证级别改变用户对文件的访问权限。
在FileStream构造函数不使用FileAccess枚举参数的版本中,使用默认值FileAccess.ReadWrite。
FileMode枚举成员如表21-8所示。使用每个值会发生什么,取决于指定的文件名是否表示已
有的文件。注意,这个表中的项表示创建流时该流指向文件中的位置,下一节将详细讨论这个主题。
除非特别说明,否则流就指向文件的开头。

Append                                   打开文件,流指向文件的末尾。只能与枚举
FileAccess.Write        结合使用 创建一个新文件。只能与枚举
FileAccess.Write        结合使用
Create              删除该文件,然后创建新文件  创建新文件
CreateNew            抛出异常  创建新文件
Open                打开现有的文件,流指向文件开头  抛出异常
OpenOrCreate           打开文件,流指向文件开头  创建新文件
Truncate               打开现有文件,清除其内容,流指向文件开头,保留文件的初始创建日期抛出异常

FileStream使用的方法有很多,如:Seek,peek,read等等下面举例分别说明:

Example1: 结合StreamReader,StreamWriter读取文件夹,写文件(read,readline,readblock,readtoend)

   private static void fileStreamTest()
        {
            string filePath = "../../sss.cs";
            char[] charArray = new char[20];
            byte[] byteArray = new byte[20];


            Console.WriteLine("<----------------addWord--------------------------------->");
            string addString = "abcdefg";
            using (FileStream stream2 = new FileStream(filePath, FileMode.Append, FileAccess.Write))
            {

                StreamWriter write = new StreamWriter(stream2);
                write.WriteLine(addString);
                write.Flush();
                Console.WriteLine("success!");
            }

            Console.WriteLine("<----------------ReadWord--------------------------------->");
            using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                using (StreamReader reader = new StreamReader(stream))
                {
                    Console.WriteLine(reader.ReadToEnd().ToString());
                }
            }

            Console.WriteLine("<----------------Read(decoding)--------------------------------->");
            using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                using (StreamReader reader = new StreamReader(stream))
                {
                    reader.Read(charArray, 0, 20);
                    string content = string.Empty;
                    foreach (int i in charArray)
                        content += (char)i;
                    Console.WriteLine(content);
                }
            }



            Console.WriteLine("<----------------ReadBlockWord--------------------------------->");
            using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                using (StreamReader reader = new StreamReader(stream))
                {
                    reader.ReadBlock(charArray, 0, 20);
                    string content = string.Empty;
                    foreach (int i in charArray)
                        content += (char)i;
                    Console.WriteLine(content);
                }

            }

            Console.WriteLine("<----------------SeekWord--------------------------------->");
            using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                Console.WriteLine("positon now is:" + (int)stream.Position);
                stream.Seek(1000, SeekOrigin.Current);
                Console.WriteLine("positon changed:" + stream.Position);

                StreamReader reader = new StreamReader(stream);
                Console.WriteLine("left word afer seek" + reader.ReadToEnd());

            }
        }

  Example2:txt文件中是有用逗号分开的类似excel数据的操作

  public void Text()
        {
            try
            {
             //   List<String> head = new List<string>();
                string[] stringArray=new  string[3];
                string[] bodyArray = new string[3];
                List<Dictionary<string, string>> listContent = new List<Dictionary<string, string>>();

                FileStream stream = new FileStream("../../file.txt",FileMode.Open,FileAccess.Read);
                StreamReader reader = new StreamReader(stream);
                stringArray=reader.ReadLine().Split(',');
                while (reader.Peek()!=-1)
                {
                   string line = reader.ReadLine();
                   bodyArray = line.Split(',');
                   Dictionary<string, string> dic = new Dictionary<string, string>();
                   for(int i=0;i<3;i++)
                   {
                      
                       dic.Add(stringArray[i].ToString(), bodyArray[i].ToString());
                     
                   }
                   listContent.Add(dic);
                   
                }

                foreach(string item in  stringArray)
                {
                    Console.Write("{0,-10}",item);
                  
                }
                Console.WriteLine();
                // Dictionary<string, string> diction = new Dictionary<string, string>();
                foreach (var diction in listContent)
                {
                   
                    Dictionary<string, string> item=( Dictionary<string, string>)diction;
                    foreach (var i in item)
                    {
                        Console.Write("{0,-10}",i.Value);
                        //Console.WriteLine();
                    }
                    Console.WriteLine();
                   
                }
            }
            catch
            {

            }

            Console.ReadKey();
        }

  

 课本上的方法:

  public void UsingFunctionGetData()
        {

            //取得函数返回的数据
            List<string> listHead=new List<string> ();
            List<Dictionary<string, string>> data = GetData(out listHead);

            foreach (var item in listHead)
            {
                Console.Write("{0,-10}",item);
            }
            Console.WriteLine();

            foreach (Dictionary<string,string> item in data)
            {
                //foreach (var single in item)
                //{
                //    Console.Write("{0,-10}",single.Value);
                //}
                foreach (string singel in listHead)
                {
                    Console.Write("{0:-10}",item[singel]);
                }
                Console.WriteLine();
            }
            Console.WriteLine();
            Console.ReadKey();
        
        }

        private List<Dictionary<string, string>> GetData(out List<string> colums)
        {

          using(FileStream stream=new FileStream ("../../file.txt",FileMode.Open,FileAccess.Read))
          {
               using(StreamReader reader=new StreamReader (stream))
               {
                   string head = string.Empty;  //文件头部信息
                   string[] stringArray = null;
                   char[] splitCharArray = new char[] { ','};   //分割符号集合
                   colums =new List<string>();

                   head=reader.ReadLine();        //获取第一行
                   stringArray = head.Split(splitCharArray);
                   //getUpperBound 获取stringArray维度的上限(不懂)
                   for (int i = 0; i <= stringArray.GetUpperBound(0); i++)  
                   {
                       colums.Add(stringArray[i]);   //获取返回的头部信息
                   }

                   //声明返回数据的List类型
                   List<Dictionary<string, string>> data = new List<Dictionary<string, string>>();
                   string nextLine = string.Empty;
                   //当下一行非空时
                   while (reader.Peek() != -1)
                   {
                       nextLine = reader.ReadLine();
                       stringArray = nextLine.Split(splitCharArray);
                       //声明单个字典对象
                       Dictionary<string, string> singleDic = new Dictionary<string, string>();
                       for(int j=0;j<=stringArray.GetUpperBound(0);j++)
                       {
                           singleDic.Add(colums[j], stringArray[j]);
                       }
                       data.Add(singleDic);
                   }

                   return data;
               }
          }
        }

  

 最后用一个比较综合的例子结尾:我们平时在做系统时要写日志文件,有时我们直接将文件写道txt文件中.(因为是学习,例子有点乱,我尽量多写点注释,解释我的意图)

 class DerectoryTest
    {
        public void CreateDrecotory()
        {
            try
            {//创建文件夹
                if (!Directory.Exists("../../newDirectory1"))
                {
                    Console.WriteLine("not exit!");
                    Directory.CreateDirectory("../../newDirectory1");
                    Console.Write("create sucess");
                }
                else
                    Console.WriteLine("directory exit");
            }
            catch(IOException e)
            {
                Console.Write("something wrong in your code!");
            
            
            }
            Console.ReadKey();
           
        
        }

        public void WriteLog()
        {
            try {            
                string day = DateTime.Now.ToString("yyyy-MM") ;           //文件夹名
                string logName = DateTime.Now.ToString("yyyy-MM-dd")+".txt";   //日志文件名,以天为一个文件
                //create a directory named by day
                if (!Directory.Exists(day))                                 //创建日志文件夹(以月为一个文件夹)
                    Directory.CreateDirectory("../../"+day);
            //创建一个FileStream对象(这步来看当前文件是否有数据)
                using (FileStream fs = new FileStream("../../"+day+"/"+logName, FileMode.Open, FileAccess.ReadWrite))
                {
                    using (StreamReader reader = new StreamReader(fs))
                    {
                        string contents = reader.ReadToEnd();
                        Console.WriteLine(contents);                    
                    }
                   
                }
          //写文件(test)往下看
                using (FileStream fs = new FileStream("../../" + day + "/" + logName, FileMode.Append, FileAccess.Write))
                {
                    using (StreamWriter writer = new StreamWriter(fs))
                    {
                        string content = string.Empty;
                        content += "------------------" + DateTime.Now.ToString() + "-------------------------
";
                        content += "nice to meet you ,welcome visited this directory and write 
";
                        content += "good luck 
";
                        writer.Write(content);
                    }
                }
            }
            catch(IOException e)
            {
                Console.WriteLine(e.InnerException+"
"+e.Message);
            }

            Console.ReadKey();

        }


        public void DeleteDirectoryOrFile()
        {
            //删除一个文件一个文件夹
            try {

                Directory.Delete("../../newDirectory1");
                File.Delete("../../2013-07log.txt");
            }
        //如果有错报错,并写入日志文件
        catch(IOException e)
        {
            using (FileStream fs = new FileStream("../../2013-07/2013-07-24.txt", FileMode.Append, FileAccess.Write))
            {
                using (StreamWriter writer = new StreamWriter(fs))
                {

                    string content = "-----------------"+DateTime.Now.ToString()+"---------------------

";
                    content += "

";
                    content+=e.InnerException+"

"+e.Message+"

"+e.StackTrace+"

";
                    content += "

";  //换行符
                    writer.Write(content);
                    Console.WriteLine("error");
                }
            }
        }
            Console.ReadKey();
        }
    }

  

原文地址:https://www.cnblogs.com/fjsnail/p/3210136.html