Le framework .net possède-t-il une bibliothèque/un assemblage intégré async
qui permet de travailler avec le système de fichiers (par exemple File.ReadAllBytes
, File.WriteAllBytes
)?
Ou dois-je écrire ma propre bibliothèque en utilisant les méthodes async
de StreamReader
et StreamWriter
?
Quelque chose comme ça serait plutôt sympa:
var bytes = await File.ReadAllBytes("my-file.whatever");
Le framework .net possède-t-il une bibliothèque/assemblée intégrée asynchrone qui permet de travailler avec le système de fichiers
Oui. Il existe des méthodes asynchrones pour travailler avec le système de fichiers mais pas pour les méthodes d'assistance sur le type statique File
. Ils sont sur FileStream
.
Donc, il n'y a pas de File.ReadAllBytesAsync
mais il y'à FileStream.ReadAsync
, etc. Par exemple:
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);
}
Il le fait déjà. Voir par exemple tilisation d'Async pour l'accès aux fichiers Article 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);
};
}
Le framework .net dispose-t-il d'une bibliothèque/assemblage asynchrone qui permet de travailler avec le système de fichiers (par exemple File.ReadAllBytes, File.WriteAllBytes)?
Malheureusement, les API de bureau sont un peu irrégulières en ce qui concerne les opérations de fichiers asynchrones. Comme vous l'avez noté, un certain nombre de méthodes pratiques Nice n'ont pas d'équivalents asynchrones. Il manque également asynchrone ouverture de fichiers (ce qui est particulièrement utile lors de l'ouverture de fichiers sur un partage réseau).
J'espère que ces API seront ajoutées à mesure que le monde se déplacera vers .NET Core.
Ou dois-je écrire ma propre bibliothèque en utilisant les méthodes asynchrones de StreamReader et StreamWriter?
C'est la meilleure approche en ce moment.
Notez que lorsque vous utilisez ReadAsync
/WriteAsync
et vos amis, vous devez explicitement ouvrir le fichier pour un accès asynchrone. La seule façon de le faire (actuellement) est d'utiliser une surcharge de constructeur FileStream
qui prend un bool isAsync
paramètre (en passant true
) ou FileOptions
paramètre (en passant FileOptions.Asynchronous
). Vous ne pouvez donc pas utiliser les méthodes ouvertes pratiques comme File.Open
.
Dans le noyau .NET (depuis la version 2.0), il existe désormais toutes les saveurs asynchrones des méthodes ReadAll/WriteAll/AppendAll correspondantes, telles que:
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
Malheureusement, ils manquent toujours à la norme .NET 2.0.