gpt4 book ai didi

c# - 读取大文本文件的前 n 个字符 - C#

转载 作者:行者123 更新时间:2023-11-30 19:08:37 28 4
gpt4 key购买 nike

我有一个非常大的文本文件,例如大约 1 GB。我只需要阅读 100 个第一个字符,仅此而已。

我搜索了 StackOverflow 和其他论坛,但他们都有一些解决方案,首先读取整个文件,然后返回文件的一些 n 个字符。

我不想读取整个文件并将其加载到内存中等。只需要第一个字符。

最佳答案

您可以使用 StreamReader.ReadBlock()从文件中读取指定数量的字符:

public static char[] ReadChars(string filename, int count)
{
using (var stream = File.OpenRead(filename))
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
char[] buffer = new char[count];
int n = reader.ReadBlock(buffer, 0, count);

char[] result = new char[n];

Array.Copy(buffer, result, n);

return result;
}
}

请注意,这假定您的文件具有 UTF8 编码。如果没有,您将需要指定正确的编码(在这种情况下,您可以将编码参数添加到 ReadChars() 而不是对其进行硬编码)。

使用 ReadBlock() 而不是 Read() 的优点是它会阻塞,直到所有字符都被读取,或者文件末尾被读取到达。然而,对于 FileStream 来说,这无关紧要;请注意,在一般情况下,Read() 返回的字节数可能少于要求的字节数,即使尚未到达流的末尾也是如此。

如果您想要一个async 版本,您可以像这样调用ReadBlockAsync():

public static async Task<char[]> ReadCharsAsync(string filename, int count)
{
using (var stream = File.OpenRead(filename))
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
char[] buffer = new char[count];
int n = await reader.ReadBlockAsync(buffer, 0, count);

char[] result = new char[n];

Array.Copy(buffer, result, n);

return result;
}
}

你可以这样调用它:

using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;

namespace Demo
{
static class Program
{
static async Task Main()
{
string filename = "Your filename here";
Console.WriteLine(await ReadCharsAsync(filename, 100));
}
}
}

关于c# - 读取大文本文件的前 n 个字符 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52604058/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com