gpt4 book ai didi

windows-runtime - 仅使用 StreamReader/StreamWriter 在 WinRT 中读取/写入大型文本文件?

转载 作者:行者123 更新时间:2023-12-05 01:30:07 28 4
gpt4 key购买 nike

我试图弄清楚如何在 WinRT 中逐行读取和写入大型文本文件。

FileIO.ReadLinesAsync 和 FileIO.WriteLinesAsync 将不起作用,因为它们使用分别传递和返回的字符串列表。使用可能导致 OutOfMemoryException 的大文本文件。

我当然可以使用 FileIO.AppendTextAsync 逐行编写,但那样效率很低。

我发现我可以像下面的示例代码一样使用 StreamReader 或 StreamWriter。

但真的没有原生 Windows 运行时方法来实现这一点吗?

顺便说一句,我知道 Windows 应用商店应用程序不应该读取或写入大文本文件。我需要一个解决方案,因为我正在为程序员写一本食谱书。

示例:使用 StreamReader 读取:

StorageFile file = ...

await Task.Run(async () =>
{
using (IRandomAccessStream winRtStream = await file.OpenAsync(FileAccessMode.Read))
{
Stream dotnetStream = winRtStream.AsStreamForRead();
using (StreamReader streamReader = new StreamReader(dotnetStream))
{
string line;
while ((line = streamReader.ReadLine()) != null)
{
...
}
}
}
});

最佳答案

实际上,您对字符串列表的假设并不完全正确。 FileIO.WriteLinesAsync接受 IEnumerable<string>作为参数。所以你可以像这样做:

IEnumerable<string> GenerateLines()
{
for (int ix = 0; ix < 10000000; ix++)
yield return "This is a line #" + ix;
}

//....
WriteLinesAsync(file, GenerateLines());

至于读取大文件,您是对的,我们需要像您在示例中所做的那样进行一些自定义工作。

关于windows-runtime - 仅使用 StreamReader/StreamWriter 在 WinRT 中读取/写入大型文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12950987/

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