Console.WriteLine(Directory.Exists(@"C:\Windows"));
Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);
DirectoryInfo directoryInfo = Directory.CreateDirectory(@"D:/test1/test2/test3/test4");
Directory.Move(@"D:/sourceDir", @"D:/destDir");
File.Copy(@"D:/sourceFile", @"D:/destFile");
FileStream fileStream = File.Create("D:/test/file1.txt")
注意File.Create是覆盖的,即如果文件已存在则会被清空
File.Create是独占的,文件创建后关闭前,其它程序不能访问该文件
using (FileStream fileStream = File.Create("D:/test/file1.txt"))
{
//将内容写入缓冲区
fileStream.Write(Encoding.UTF8.GetBytes("hello\r\nhello2"));
//清空缓冲区,这时缓冲区的内容才会被真正写入文件中,此处的Flush方法可不调用,因为使用了using,当离开using时fileStream关闭,将自动清空缓冲区。反之,如果不使用using则需要手动调用fileStream.Flush()方法或fileStream.Close()方法,否则内容不会被写入文件中
//fileStream.Flush();
}
using (StreamWriter streamWriter = new StreamWriter("D:/test/file1.txt"))
{
streamWriter.WriteLine("hello3");
streamWriter.WriteLine("hello4");
//streamWriter.Flush();
}
using (StreamWriter streamWriter = File.AppendText(@"D:\test\file1.txt"))
{
streamWriter.WriteLine("hello5");
}
1.一次性读完分行保存在string[]中:
foreach(string line in File.ReadAllLines("D:/test/file1.txt"))
{
Console.WriteLine(line);
}
2.一次性读完所有内容保存在一个string变量中
string fileString = File.ReadAllText("D:/test/file1.txt");
Console.WriteLine(fileString);
3.一次性读完所有内容保存在bite[]中
byte[] fileBytes = File.ReadAllBytes("D:/test/file1.txt");
Console.WriteLine(Encoding.Default.GetString(fileBytes));
一次性读完文件所有内容有个问题,就是当文件特别大时一次性把文件的内容读到内存中显然是不现实的,因此需要有一次性读文件的一部分到内存中的方法
1.一次读取一行
StreamReader streamReader = new("D:/test/file1.txt");
string line = string.Empty;
while (true)
{
line = streamReader.ReadLine();
if (line is not null)
{
Console.WriteLine(line);
}
else
{
break;
}
}
2.一次读取固定长度的byte[]
const int MAXSIZE = 1024;
byte[] buffer = new byte[MAXSIZE];
using (var fileStream = File.OpenRead("D:/test/file1.txt"))
{
int numOfByte = 0;
do
{
Console.Write(Encoding.Default.GetString(buffer));
numOfByte = fileStream.Read(buffer, 0, MAXSIZE);
}
while (numOfByte == MAXSIZE);
}
以上程序运行时出现乱码,原因是中文UTF8编码后占三个字节
如果按固定长度读取byte[],可能导致中文字符截断,
例如假设byte[]最大长度为100,则只能存放33个中文加上1/3个中文,这样中文字符被截断出现乱码
我目前还没有找到很好的解决该问题的方法