文章目录
Directory与File是两个静态类,可以获取文件和文件夹信息,在对某个文件或文件夹执行一次操作的时候很有用
Path为路径操作提供了各种方法
DirectoryInfor与FileInfor类是两个可以实例化的类,在实例化的时候有一些开销,但实例化完成后对某个文件或文件夹进行大量操作基本没有开销了,FileSystemInfo是他们共同的基类
DriveInfo是一个与驱动器有关的类
转义字符 @
///转义字符 @会将地址转义为适应本系统所需地址格式
const string HOSTFILODERPATH = @"C:\Windows\System32\drivers\etc";
Directory与File
检查文件是否存在
const string HOSTFILODERPATH = @"C:\Windows\System32\drivers\etc";
Console.WriteLine($"{
Directory.Exists(HOSTFILODERPATH)}");
遍历文件夹中的文件
const string HOSTFILODERPATH = @"C:\Windows\System32\drivers\etc";
new List<string>(Directory.EnumerateFiles(HOSTFILODERPATH)).ForEach((f) => Console.WriteLine(f));
获取当前编译环境地址
Console.WriteLine(Directory.GetCurrentDirectory());
组合文件路径
string NewPath = Path.Combine(Directory.GetCurrentDirectory(), "Hosts");
Console.WriteLine(NewPath);
单个文件的copy
File.Copy(Path.Combine(HOSTFILODERPATH, "hosts"), NewPath, true);
文件创建与最后一次修改时间
Console.WriteLine($"文件创建时间:{
File.GetCreationTime(NewPath)}");
Console.WriteLine($"文件创建最后修改时间:{
File.GetLastWriteTime(NewPath)}");
DirectoryInfo与FileInfo
遍历文件夹内容
const string HOSTFILODERPATH = @"C:\Windows\System32\drivers\etc";
Console.WriteLine("用DirectoryInfo遍历文件夹内容");
DirectoryInfo directoryInfo = new DirectoryInfo(HOSTFILODERPATH);
new List<FileSystemInfo>(directoryInfo.GetFileSystemInfos()).ForEach((f) => Console.WriteLine($"文件夹名称:{
f}"));
FileInfo fileInfo = new FileInfo(@"C:\Windows\System32\drivers\etc\hosts");
Console.WriteLine($"hosts全名:{
fileInfo.FullName},hosts扩展名:{
fileInfo.Extension}");
创建文件夹
//创建文件夹(若上级文件夹不存在,也会创建)
DirectoryInfo directoryInfo1 = new DirectoryInfo(@"D:\files\Test");
directoryInfo1.Create();
创建文件
string newFilePath = @"D:\files\test.ini";
var newfile = new FileInfo(newFilePath);
newfile.Create();
Path
目录分隔符
Console.WriteLine($"目录分隔符:{
Path.DirectorySeparatorChar}");
环境变量分隔符
Console.WriteLine($"环境变量分隔符:{
Path.PathSeparator}");
容量分隔符
Console.WriteLine($"容量分隔符:{
Path.VolumeSeparatorChar}");
替换字符
Console.WriteLine($"替换字符:{
Path.AltDirectorySeparatorChar}");
不允许在路径中使用的字符
new List<char>(Path.GetInvalidPathChars()).ForEach((f) => Console.WriteLine($"不允许在路径中使用的字符:{
f}"));
不允许在文件名中使用的字符
new List<char>(Path.GetInvalidFileNameChars()).ForEach((f) => Console.WriteLine($"不允许在文件名中使用的字符:{
f.ToString()}"));
路径拼接
Console.WriteLine($@"C:\Window和System连接结果:{
Path.Combine(@"C:\Window", "System")}");
DriveInfo
查看驱动器信息
DriveInfo driveInfo = new DriveInfo("C");
Console.WriteLine("查看驱动器信息\n");
可用空间
Console.WriteLine($"可用空间,{
driveInfo.AvailableFreeSpace / Math.Pow(1024, 3)}");
驱动器格式
Console.WriteLine($"驱动器格式:{
driveInfo.DriveFormat}");
驱动器名称
Console.WriteLine($"驱动器名称:{
driveInfo.DriveType}");
驱动器卷标
Console.WriteLine($"驱动器卷标:{
driveInfo.VolumeLabel}");
驱动器总可用空闲空间
Console.WriteLine($"驱动器总可用空闲空间:{
driveInfo.TotalFreeSpace / Math.Pow(1024, 3)}");
File读取文件
部分文件读取–按字符
const string HOSTFILODERPATH = @"C:\Windows\System32\drivers\etc\hosts";
Console.WriteLine("显示hosts文件的部分内容");
Console.WriteLine(File.ReadAllText(HOSTFILODERPATH).Substring(0, 10));
部分文件读取–按条件
//读取文件所有行
string[] lines = File.ReadAllLines(HOSTFILODERPATH);
//使用linq语句进行数据筛选
var comment = from line in lines
where line.StartsWith("#")
select line;
foreach (var item in comment.Take(10))
{
Console.WriteLine(item);
}
部分文件读取–按字节
Console.WriteLine("读取hosts文件的前20个字节");
byte[] bytes = File.ReadAllBytes(HOSTFILODERPATH);
for (int i = 0; i < Math.Min(20, bytes.Length); i++)
{
Console.WriteLine(bytes[i]);
}
创建文件夹并写入内容
const string TestFile = "test.txt";
string msg = "测试字符串:564651";
File.WriteAllText(TestFile, msg);
FileStream
//不同方式打开文件流--FileMode.Append文件内容追加--FileMode.Create文件内容创建
FileStream fileStream = new FileStream("test.txt", FileMode.Create, FileAccess.Write);
//FileStream fileStream1 = new FileInfo("test.txt").Open(FileMode.OpenOrCreate, FileAccess.ReadWrite);
//写文件(覆盖)
fileStream.WriteByte(50);
fileStream.Write(new byte[] {
100,25,22,88},0,4);
fileStream.Close();
追加内容,而不是覆盖
//FileStream fileStream1 = new FileInfo("test.txt").Open(FileMode.Append, FileAccess.Write);
//fileStream.Write(new byte[] { 10, 20, 30, 40 }, 0, 4);
//fileStream.Close();
//读文件
fileStream = new FileInfo("test.txt").OpenRead();
byte[] buffer = new byte[fileStream.Length];
fileStream.Read(buffer,0, buffer.Length);
new List<byte>(buffer).ForEach((e) => Console.Write(e + " ")) ;
fileStream.Close();
StreamReader与StreamWriter
Console.WriteLine("字符流读写和测试");
// new StreamWriter("test.txt")--覆盖 new StreamWriter("test.txt",true)--追加
StreamWriter streamWriter = new StreamWriter("test.txt",true);
streamWriter.WriteLine("this is a file");
streamWriter.WriteLine(DateTime.Now.ToString());
streamWriter.Close();
StreamReader streamReader = new StreamReader("test.txt");
new List<string>(streamReader.ReadToEnd().Split('\n')).ForEach((e)=>Console.WriteLine(e));
streamReader.Close();