WinRT で大きなテキスト ファイルを 1 行ずつ読み書きする方法を見つけようとしています。
FileIO.ReadLinesAsync それぞれ FileIO.WriteLinesAsync は、それぞれ返される渡された文字列のリストを操作するため、機能しません。OutOfMemoryException を引き起こす可能性がある大きなテキスト ファイル。
もちろん、FileIO.AppendTextAsync を使用して 1 行ずつ記述することもできますが、それは非効率的です。
私が理解したのは、以下のサンプル コードのように 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)
{
...
}
}
}
});