如何在 .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 中读/写文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 perl 中读/写命名管道?

如何在 C/C++ 中读/写任意位

asp.net core1.x/asp.net core2.0中如何加载多个配置文件

在 MySql 中读/写 unicode 数据

asp.net core 之静态文件目录的操作

asp.net core 之静态文件目录的操作