文件夹/文件 操作
文件夹/文件检查
主要是 Directory
/ File
/ DirectoryInfo
/ FileInfo
几个类来操作检查。
注:Path是路径字符串的拼接、剪切、检查操作类,并不会执行IO操作。
文件夹/文件新增
1 2 3
| Directory.CreateDirectory(path); File.Create(path); File.AppendText(path);
|
文件夹新增时,dotnet会自动逐层创建,例如“C:\test1\test2”,“test1”文件夹不存在会先创建“test1”文件夹。
文件夹/文件复制
1 2
| File.Copy(path1, path2);
|
文件夹/文件移动
1 2
| Directory.Move(path1, path2); File.Move(path1, path2);
|
文件夹/文件删除
1 2
| Directory.Delete(path, true); File.Delete(path);
|
文件写入/读取
常见写入方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| using (FileStream fileStream = File.Create(path)) { string sText = "My name is Li Lei."; byte[] bytes = Encoding.Default.GetBytes(sText); fileStream.Write(bytes, 0, bytes.Length); }
using (FileStream fileStream = File.Create(path)) { using (StreamWriter streamWriter = new StreamWriter(fileStream)) { string sText = "My name is Han Meimei."; streamWriter.Write(sText); } }
using (StreamWriter streamWriter = File.AppendText(path)) { string sText = "Nice to meet you."; byte[] bytes = Encoding.Default.GetBytes(sText); streamWriter.BaseStream.Write(bytes, 0, bytes.Length); }
using (StreamWriter streamWriter = File.AppendText(path)) { string sText = "Nice to meet you too."; streamWriter.Write(sText); }
|
常见读取方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| byte[] bytes = File.ReadAllBytes(path); string sText = File.ReadAllText(path); string[] aLineText = File.ReadAllLines(path); IEnumerable<string> listLineText = File.ReadLines(path);
using (FileStream fileStream = File.OpenRead(path)) { int length = 5; int result = 0; do { byte[] bytes = new byte[length]; result = fileStream.Read(bytes, 0, 5); Console.WriteLine(Encoding.Default.GetString(bytes)); } while (length == result); }
|
磁盘操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| DriveInfo[] aInfo = DriveInfo.GetDrives(); foreach (var info in aInfo) { Console.WriteLine("----------------------------------------------------"); Console.WriteLine("驱动器的名称:" + info.Name); Console.WriteLine("驱动器根目录:" + info.RootDirectory); Console.WriteLine("指示驱动器上可用空闲空间总量:" + info.AvailableFreeSpace); Console.WriteLine("文件系统名称:" + info.DriveFormat); Console.WriteLine("驱动器类型:" + info.DriveType); Console.WriteLine("获取一个指示驱动器是否已经准备好:" + info.IsReady); Console.WriteLine("获取驱动器上可用空闲空间总量:" + info.TotalFreeSpace); Console.WriteLine("获取驱动器空间总大小:" + info.TotalSize); Console.WriteLine("获取或设置驱动器的卷标:" + info.VolumeLabel); }
|
后记
这部分原本感觉没必要提交上来,因为这部分内容太太基础。
但是实际工作中,经常会遗忘一部分方法怎么使用,所以提交上来供以后查阅。
另外由于经常翻看前辈代码,IO有部分需要特别注意一下:
- 多线程操作文件读写,一定要加锁,尽量避免使用
try
处理文件被占用引发的异常;
- 文件夹创建碰到多层级无需逐层创建,dotnet底层会自动帮我们逐层创建;
- 记录日志文件,内容使用流操作写文件,直接使用
File.AppendText()
方法即可,而且不用判断文件是否存在,dotnet会在不存在时自动帮我们创建;
先写这些,有些细节以后想到了再补。