当前位置: 代码网 > it编程>编程语言>Asp.net > 在C#中读取文件的六种主流方法详解

在C#中读取文件的六种主流方法详解

2025年11月23日 Asp.net 我要评论
在 c# 中读取文件有多种方法,不同方式适用于不同场景(小型文件、大型文件、文本文件或二进制文件)。以下是6 种主流方法及其适用场景:方法1:file.readalltext(读取整个文本文件)str

在 c# 中读取文件有多种方法,不同方式适用于不同场景(小型文件、大型文件、文本文件或二进制文件)。以下是 6 种主流方法及其适用场景:

方法1:file.readalltext(读取整个文本文件)

string path = @"c:\example\test.txt";
try
{
    string content = file.readalltext(path);
    console.writeline(content);
}
catch (ioexception ex)
{
    console.writeline($"读取失败: {ex.message}");
}

特点

  • 超简单,单行代码读取全部
  • 仅适合小型文件(全部加载到内存)
  • 适用于配置文件、json等小文件

方法2:file.readalllines(按行读取为数组)

string[] lines = file.readalllines(path);
foreach (string line in lines)
{
    console.writeline(line);
}

特点

  • 分行处理,适合日志文件
  • 同样全量加载,内存压力大

方法3:streamreader(逐行读取,内存友好)

using (streamreader reader = new streamreader(path))
{
    string line;
    while ((line = reader.readline()) != null)
    {
        console.writeline(line); // 逐行处理
    }
}

特点

  • 内存效率高,适合大文件
  • 推荐用于日志文件、大型csv

方法4:filestream(二进制/字节读取)

byte[] buffer = new byte[1024];
using (filestream fs = new filestream(path, filemode.open))
{
    int bytesread;
    while ((bytesread = fs.read(buffer, 0, buffer.length)) > 0)
    {
        string chunk = encoding.utf8.getstring(buffer, 0, bytesread);
        console.write(chunk);
    }
}

特点

  • 适合二进制文件(如图片、视频)
  • 可控缓冲区大小

方法5:async/await(异步读取,避免ui卡顿)

async task readfileasync(string path)
{
    using (streamreader reader = new streamreader(path))
    {
        string content = await reader.readtoendasync();
        console.writeline(content);
    }
}

// 调用
await readfileasync(@"c:\largefile.txt");

特点

  • 不阻塞ui线程,winforms/wpf必备
  • 适合网络磁盘文件

方法6:memorymappedfile(超大型文件,内存映射)

using (var mmf = memorymappedfile.createfromfile(path))
{
    using (var stream = mmf.createviewstream())
    {
        byte[] buffer = new byte[1024];
        stream.read(buffer, 0, buffer.length);
        string text = encoding.utf8.getstring(buffer);
        console.writeline(text);
    }
}

特点

  • 处理gb级文件(如数据库文件)
  • 高级场景使用

方法对比表

方法适用文件大小内存占用速度适用场景
readalltext<10mb配置文件
readalllines<10mb日志分析
streamreader任意大型文本
filestream任意可控二进制文件
async/await任意依实现ui程序
memorymappedgb+极低超大文件

注意事项

  1. 异常处理:始终用 try-catch 捕获 filenotfoundexception 或 ioexception
  2. 路径安全
string safepath = path.combine("c:", "folder", "file.txt"); // 避免手写路径
  • 编码问题:指定正确的编码(如中文用 encoding.utf8
file.readalltext(path, encoding.getencoding("gb2312"));
  • 资源释放:必须用 using 或手动释放 filestream/streamreader

最佳实践

  • 小型文本 → file.readalltext
  • 大型文本 → streamreader + while
  • 二进制数据 → filestream
  • ui程序 → async/await + readtoendasync
  • gb级文件 → memorymappedfile

以上就是在c#中读取文件的六种主流方法详解的详细内容,更多关于c#读取文件的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com