文件流的读写
文件写入方式:
{ 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"));//合并两个路径 }
整合