如何在 .Net Core 中读/写文件?
Posted
技术标签:
【中文标题】如何在 .Net Core 中读/写文件?【英文标题】:How to read/write files in .Net Core? 【发布时间】:2017-06-01 17:43:08 【问题描述】:.Net Core 中读取/写入文件的选项有哪些?
我正在开发我的第一个 .Net Core 应用程序并寻找
File.Read*
/File.Write*
函数(System.IO
来自 .Net
)替代方案。
【问题讨论】:
【参考方案1】:包裹:System.IO.FileSystem
System.IO.File.ReadAllText("MyTextFile.txt"); ?
【讨论】:
【参考方案2】:FileStream fileStream = new FileStream("file.txt", FileMode.Open);
using (StreamReader reader = new StreamReader(fileStream))
string line = reader.ReadLine();
使用System.IO.FileStream 和System.IO.StreamReader。您也可以使用System.IO.BinaryReader 或System.IO.BinaryWriter。
【讨论】:
请注意,似乎没有 FileStream.Lock / .Unlock 将整个文件读入一个数组然后处理数据的速度要快得多,而不是在读入时处理每一行。有关更多信息,请查看这篇文章:cc.davelozinski.com/c-sharp/… @ChrisHansen 那是关于数据的异步处理,而不是读取...... 优秀的简短回答,正如 Chris 所指出的,StreamReader 在阅读文本时速度最快,您还可以在此处完整发布如何在 .NET Core/.NET 上阅读文件:qawithexperts.com/article/c-sharp/…【参考方案3】:写作:
using (System.IO.StreamWriter file =
new System.IO.StreamWriter(System.IO.File.Create(filePath).Dispose()))
file.WriteLine("your text here");
【讨论】:
System.IO.File.Create(filePath)
可能存在内存泄漏
你能给我一个链接或一些原因@ManIkWeet 吗?这是 MS 的标准教程。
System.IO.File.Create(filePath)
创建一个FileStream
,它实现了IDisposable
。我不相信处置 StreamWriter
也会处置它正在环绕的 FileStream
。查看反编译代码时,我可以看到它在包装的Stream
上调用了Close()
,但不是Dispose()
。当然,垃圾收集器可能会在 Finalize()
操作上处理包装的 Stream
,但这可能会产生意想不到的性能影响。
嗯,我明白了,应该是 System.IO.File.Create(filePath).Dispose()
。你同意吗?
我会简单地使用两个 using
这样的语句:using (var fileStream = System.IO.File.Create(filePath)) using (var fileWriter = new System.IO.StreamWriter(fileStream)) fileWriter.WriteLine("your text here");
【参考方案4】:
适用于 Net Core 2.1
var file = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "email", "EmailRegister.htm");
string SendData = System.IO.File.ReadAllText(file);
【讨论】:
【参考方案5】:用途:
File.ReadAllLines("My textfile.txt");
参考:https://msdn.microsoft.com/pt-br/library/s2tte0y1(v=vs.110).aspx
【讨论】:
这是一个点网核心问题,不是点网框架参考。【参考方案6】:用于将任何文本写入文件。
public static void WriteToFile(string DirectoryPath,string FileName,string Text)
//Check Whether directory exist or not if not then create it
if(!Directory.Exists(DirectoryPath))
Directory.CreateDirectory(DirectoryPath);
string FilePath = DirectoryPath + "\\" + FileName;
//Check Whether file exist or not if not then create it new else append on same file
if (!File.Exists(FilePath))
File.WriteAllText(FilePath, Text);
else
Text = $"Environment.NewLineText";
File.AppendAllText(FilePath, Text);
用于从文件中读取文本
public static string ReadFromFile(string DirectoryPath,string FileName)
if (Directory.Exists(DirectoryPath))
string FilePath = DirectoryPath + "\\" + FileName;
if (File.Exists(FilePath))
return File.ReadAllText(FilePath);
return "";
参考这里this是微软官方文档链接。
【讨论】:
【参考方案7】: public static void Copy(String SourceFile, String TargetFile)
FileStream fis = null;
FileStream fos = null;
try
Console.Write("## Try No. " + a + " : (Write from " + SourceFile + " to " + TargetFile + ")\n");
fis = new FileStream(SourceFile, FileMode.Open, FileAccess.ReadWrite);
fos = new FileStream(TargetFile, FileMode.Create, FileAccess.ReadWrite);
int intbuffer = 5242880;
byte[] b = new byte[intbuffer];
int i;
while ((i = fis.Read(b, 0, intbuffer)) > 0)
fos.Write(b, 0, i);
Console.Write("Writing file : " + TargetFile + " is successful.\n");
break;
catch (Exception e)
Console.Write("Writing file : " + TargetFile + " is unsuccessful.\n");
Console.Write(e);
finally
if (fis != null)
fis.Close();
if (fos != null)
fos.Close();
上面的代码将读取一个大文件并写入一个新的大文件。 “intbuffer”值可以设置为 1024 的倍数。当源文件和目标文件都打开时,它按字节读取大文件并按字节写入新的目标文件。它不会耗尽内存。
【讨论】:
删除中断;以上是关于如何在 .Net Core 中读/写文件?的主要内容,如果未能解决你的问题,请参考以下文章