zoukankan      html  css  js  c++  java
  • 文件,文件夹,文件流,日志文件写入记事本

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

    一、文件操作: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();
            }
        }
    

      

  • 相关阅读:
    struts2+ajax实现异步刷新
    ajax实现异步刷新
    AJAX学习总结
    Java中的日期工具类
    jsp页面中用户注销的写法
    封神台靶场:第七章:GET THE PASS! 【技能点:进程中抓下管理员明文密码】
    封神台靶场:第六章:SYSTEM!POWER!【配套课时:webshel​​l控制目标实战演练】
    封神台靶场:第五章:进击!拿到Web最高权限!【配套课时:绕过防护上传木马实战演练】
    封神台靶场:第四章:为了更多的权限!留言板!【配套课时:cookie伪造目标权限 实战演练】
    封神台靶场:第三章:爆破管理员账户登录后台【配套课时:burp到支付和暴破 实战演练】
  • 原文地址:https://www.cnblogs.com/fjsnail/p/3210136.html
Copyright © 2011-2022 走看看