文件流的读写

文件写入方式:

        { 
                DirectoryInfo directory = new DirectoryInfo(LogPath);//不存在不报错  注意exists属性
                Console.WriteLine(string.Format("{0} {1} {2}", directory.FullName, directory.CreationTime, directory.LastWriteTime));
                string fileName = Path.Combine(LogPath, "log.txt");
                string fileNameCopy = Path.Combine(LogPath, "logCopy.txt");
                string fileNameMove = Path.Combine(LogPath, "logMove.txt");
                bool isExists = File.Exists(fileName);
                if (!isExists)
                {
                    Directory.CreateDirectory(LogPath);//创建了文件夹之后,才能创建里面的文件
                    using (FileStream fileStream = File.Create(fileName))//打开文件流 (创建文件并写入)
                    {
                        string name = "12345567778890";
                        byte[] bytes = Encoding.Default.GetBytes(name);
                        fileStream.Write(bytes, 0, bytes.Length);
                        //数据是先被读到了内存中的 ,再把数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,
                        //因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了close()方法关闭了读写流,
                        //那么这部分数据就会丢失,所以为了防止数据丢失,应该在关闭读写流之前先flush()。
                        fileStream.Flush();
                    }
                    // 如果文件不存在就创建,如果存在就新建一个覆盖掉
                    using (FileStream fileStream = File.Create(fileName))//打开文件流 (创建文件并写入)
                    {
                        StreamWriter sw = new StreamWriter(fileStream);
                        //直接通过StreamWriter对象的WriteLine方法写入数据
                        sw.WriteLine("1234567890");
                        sw.Flush();
                    }
                    //追加内容
                    using (StreamWriter sw = File.AppendText(fileName))//流写入器(创建/打开文件并写入)
                    {
                        string msg = "今天是Course6IOSerialize,今天上课的人有55个人";
                        sw.WriteLine(msg);
                        sw.Flush();
                    }
                    using (StreamWriter sw = File.AppendText(fileName))//流写入器(创建/打开文件并写入)
                    {
                        //二进制的写法
                        string name = "0987654321";
                        byte[] bytes = Encoding.Default.GetBytes(name);
                        sw.BaseStream.Write(bytes, 0, bytes.Length);
                        sw.Flush();
                    }

                 File.Copy(fileName, fileNameCopy);
                 File.Move(fileName, fileNameMove);
                 File.Delete(fileNameCopy);
                 File.Delete(fileNameMove);//尽量不要delete

                }
            }

 

 

文件读取方式

{
                     #region 文件太大,分批读取

                    //文件太大,用工具去打开的时候,计算机直接卡死了
                    using (FileStream stream = File.OpenRead(fileName))//分批读取
                    {
                        int length = 1024;
                        int result = 0;
                        //do-while循环,先读取一部分长度的,如果实际读出来的和假定读取的长度一样,说明还未读完或刚好读完,继续读取然后再判断
                        do
                        {
                            byte[] bytes = new byte[length];
                            result = stream.Read(bytes, 0, length);
                            for (int i = 0; i < result; i++)
                            {
                                Console.WriteLine(bytes[i].ToString());
                            }
                        }
                        while (length == result);
                    }
                    #endregion
              }     

                { 
                //读取硬盘信息
                DriveInfo[] drives = DriveInfo.GetDrives();

                foreach (DriveInfo drive in drives)
                {
                    if (drive.IsReady)
                        Console.WriteLine("类型:{0} 卷标:{1} 名称:{2} 总空间:{3} 剩余空间:{4}",
drive.DriveType, drive.VolumeLabel, drive.Name, drive.TotalSize, drive.TotalFreeSpace);
else Console.WriteLine("类型:{0} is not ready", drive.DriveType); } }

 

其他一些使用方式

           { 
                Console.WriteLine(Path.GetDirectoryName(@"d:\\abc")); //将返回 d:\
                Console.WriteLine(Path.GetDirectoryName(@"d:\\abc\"));// 将返回 d:\abc
                Console.WriteLine(Path.GetRandomFileName());//将返回随机的文件名
                Console.WriteLine(Path.GetFileNameWithoutExtension("d:\\abc.txt"));// 将返回abc
                Console.WriteLine(Path.GetInvalidPathChars());// 将返回禁止在路径中使用的字符
                Console.WriteLine(Path.GetInvalidFileNameChars());//将返回禁止在文件名中使用的字符
                Console.WriteLine(Path.Combine(LogPath, "log.txt"));//合并两个路径
            }

 

 

整合