Article directory
Directory and File are two static classes that can obtain file and folder information. It is very useful when performing an operation on a file or folder. Path provides
various methods for path operations.
DirectoryInfor and FileInfor are two examples that can be used. There is some overhead during instantiation, but there is basically no overhead for a large number of operations on a file or folder after instantiation. FileSystemInfo is their common base class. DriveInfo is a class related to
drives .
escape character @
///转义字符 @会将地址转义为适应本系统所需地址格式
const string HOSTFILODERPATH = @"C:\Windows\System32\drivers\etc";
Directory and File
Check if the file exists
const string HOSTFILODERPATH = @"C:\Windows\System32\drivers\etc";
Console.WriteLine($"{
Directory.Exists(HOSTFILODERPATH)}");
loop through files in folder
const string HOSTFILODERPATH = @"C:\Windows\System32\drivers\etc";
new List<string>(Directory.EnumerateFiles(HOSTFILODERPATH)).ForEach((f) => Console.WriteLine(f));
Get the address of the current compilation environment
Console.WriteLine(Directory.GetCurrentDirectory());
Composite file path
string NewPath = Path.Combine(Directory.GetCurrentDirectory(), "Hosts");
Console.WriteLine(NewPath);
copy of a single file
File.Copy(Path.Combine(HOSTFILODERPATH, "hosts"), NewPath, true);
File creation and last modification time
Console.WriteLine($"文件创建时间:{
File.GetCreationTime(NewPath)}");
Console.WriteLine($"文件创建最后修改时间:{
File.GetLastWriteTime(NewPath)}");
DirectoryInfo与FileInfo
loop through folder contents
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}");
create folder
//创建文件夹(若上级文件夹不存在,也会创建)
DirectoryInfo directoryInfo1 = new DirectoryInfo(@"D:\files\Test");
directoryInfo1.Create();
Create a file
string newFilePath = @"D:\files\test.ini";
var newfile = new FileInfo(newFilePath);
newfile.Create();
Path
directory separator
Console.WriteLine($"目录分隔符:{
Path.DirectorySeparatorChar}");
environment variable separator
Console.WriteLine($"环境变量分隔符:{
Path.PathSeparator}");
capacity separator
Console.WriteLine($"容量分隔符:{
Path.VolumeSeparatorChar}");
replacement character
Console.WriteLine($"替换字符:{
Path.AltDirectorySeparatorChar}");
Characters not allowed in paths
new List<char>(Path.GetInvalidPathChars()).ForEach((f) => Console.WriteLine($"不允许在路径中使用的字符:{
f}"));
Characters not allowed in filenames
new List<char>(Path.GetInvalidFileNameChars()).ForEach((f) => Console.WriteLine($"不允许在文件名中使用的字符:{
f.ToString()}"));
path stitching
Console.WriteLine($@"C:\Window和System连接结果:{
Path.Combine(@"C:\Window", "System")}");
DriveInfo
View drive information
DriveInfo driveInfo = new DriveInfo("C");
Console.WriteLine("查看驱动器信息\n");
Available space
Console.WriteLine($"可用空间,{
driveInfo.AvailableFreeSpace / Math.Pow(1024, 3)}");
drive format
Console.WriteLine($"驱动器格式:{
driveInfo.DriveFormat}");
drive name
Console.WriteLine($"驱动器名称:{
driveInfo.DriveType}");
drive label
Console.WriteLine($"驱动器卷标:{
driveInfo.VolumeLabel}");
Total drive free space available
Console.WriteLine($"驱动器总可用空闲空间:{
driveInfo.TotalFreeSpace / Math.Pow(1024, 3)}");
File reads a file
Partial file reading – by character
const string HOSTFILODERPATH = @"C:\Windows\System32\drivers\etc\hosts";
Console.WriteLine("显示hosts文件的部分内容");
Console.WriteLine(File.ReadAllText(HOSTFILODERPATH).Substring(0, 10));
Partial file read – by condition
//读取文件所有行
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);
}
Partial file reading – by bytes
Console.WriteLine("读取hosts文件的前20个字节");
byte[] bytes = File.ReadAllBytes(HOSTFILODERPATH);
for (int i = 0; i < Math.Min(20, bytes.Length); i++)
{
Console.WriteLine(bytes[i]);
}
Create folder and write content
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();