我正在使用c#和.Net 4.5。所以我可以使用.Net 4.5的async / await功能。但是我没有在File.Copy
中找到File.Move
,Directory.GetFiles
,System.IO
等的异步方法。 / p>
答案 0 :(得分:3)
有很多方法可以做到这一点。 看看我从msdn。
为你复制的这个例子您可以使用FileStream和CopyToAsync:
来实现using System;
using System.Threading.Tasks;
using System.Windows;
using System.IO;
namespace WpfApplication
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
string StartDirectory = @"c:\Users\exampleuser\start";
string EndDirectory = @"c:\Users\exampleuser\end";
foreach (string filename in Directory.EnumerateFiles(StartDirectory))
{
using (FileStream SourceStream = File.Open(filename, FileMode.Open))
{
using (FileStream DestinationStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf('\\'))))
{
await SourceStream.CopyToAsync(DestinationStream);
}
}
}
}
}
}
或者通过使用StreamReader和StreamWriter对象异步读取和写入文件的内容。
private async void Button_Click(object sender, RoutedEventArgs e)
{
string UserDirectory = @"c:\Users\exampleuser\";
using (StreamReader SourceReader = File.OpenText(UserDirectory + "BigFile.txt"))
{
using (StreamWriter DestinationWriter = File.CreateText(UserDirectory + "CopiedFile.txt"))
{
await CopyFilesAsync(SourceReader, DestinationWriter);
}
}
}
public async Task CopyFilesAsync(StreamReader Source, StreamWriter Destination)
{
char[] buffer = new char[0x1000];
int numRead;
while ((numRead = await Source.ReadAsync(buffer, 0, buffer.Length)) != 0)
{
await Destination.WriteAsync(buffer, 0, numRead);
}
}
更多信息: http://msdn.microsoft.com/en-us/library/kztecsys(v=vs.110).aspx
答案 1 :(得分:2)
不,async
/ Copy
/等等没有Move
个等价物。如有必要,您可以自己构建它们。
GetFiles
有点不同。有EnumerateFiles
响应更快(但实际上不是async
)。
答案 2 :(得分:2)
对于复制,您可以使用Stream.CopyToAsync
方法。在Task.Run