.netフレームワークには、ファイルシステムを操作できるasync
組み込みライブラリ/アセンブリがありますか(例:File.ReadAllBytes
、File.WriteAllBytes
)?
または、async
およびStreamReader
のStreamWriter
メソッドを使用して独自のライブラリを作成する必要がありますか?
このようなものはかなりいいでしょう:
var bytes = await File.ReadAllBytes("my-file.whatever");
.netフレームワークには、ファイルシステムを操作できる非同期組み込みライブラリ/アセンブリがありますか
はい。ファイルシステムを操作するための非同期メソッドがありますが、静的File
タイプのヘルパーメソッドはありません。 FileStream
にあります。
したがって、File.ReadAllBytesAsync
はありませんが、FileStream.ReadAsync
などはあります。たとえば、次のようになります。
byte[] result;
using (FileStream stream = File.Open(@"C:\file.txt", FileMode.Open))
{
result = new byte[stream.Length];
await stream.ReadAsync(result, 0, (int)stream.Length);
}
すでにそれをしています。たとえば、 ファイルアクセスに非同期を使用 MSDNの記事を参照してください。
private async Task WriteTextAsync(string filePath, string text)
{
byte[] encodedText = Encoding.Unicode.GetBytes(text);
using (FileStream sourceStream = new FileStream(filePath,
FileMode.Append, FileAccess.Write, FileShare.None,
bufferSize: 4096, useAsync: true))
{
await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
};
}
.netフレームワークには、ファイルシステム(File.ReadAllBytes、File.WriteAllBytesなど)を操作できる非同期組み込みライブラリ/アセンブリがありますか?
残念ながら、非同期ファイル操作に関しては、デスクトップAPIは少し不安定です。既に説明したように、Niceの便利なメソッドの多くには、同等の非同期メソッドがありません。また、ファイルの非同期openingもありません(これは、ネットワーク共有を介してファイルを開くときに特に便利です)。
世界が.NET Coreに移行するにつれて、これらのAPIが追加されることを期待しています。
または、StreamReaderとStreamWriterの非同期メソッドを使用して独自のライブラリを作成する必要がありますか?
これが現在の最良のアプローチです。
ReadAsync
/WriteAsync
とその友達を使用する場合は、明示的に非同期アクセスのためにファイルを開く必要があることに注意してください。これを(現在)行う唯一の方法は、bool isAsync
パラメーター(FileStream
を渡す)またはtrue
パラメーター(FileOptions.Asynchronous
を渡す)を受け取るFileOptions
コンストラクターオーバーロードを使用することです。したがって、File.Open
のような便利なオープンメソッドを使用することはできません。
.NETコア(バージョン2.0以降)には、対応するReadAll/WriteAll/AppendAllメソッドのすべての非同期フレーバーがあります:
File.(Read|Write|Append)All(Text|Lines|Bytes)Async
https://docs.Microsoft.com/en-us/dotnet/api/system.io.file.readallbytesasync?view=netcore-2.1
残念ながら、.NET標準2.0にはまだありません。