У меня следующий сценарий, я должен скопировать несколько (около 10,50,200, ...) файлов. Я делаю это синхронно один за другим. Это мой фрагмент кода для этого.Копирование нескольких файлов в потоке
static void Main(string[] args)
{
string path = @"";
FileSystemWatcher listener = new FileSystemWatcher(path);
listener.Created += new FileSystemEventHandler(listener_Created);
listener.EnableRaisingEvents = true;
while (Console.ReadLine() != "exit") ;
}
public static void listener_Created(object sender, FileSystemEventArgs e)
{
while (!IsFileReady(e.FullPath)) ;
File.Copy(e.FullPath, @"D:\levani\FolderListenerTest\CopiedFilesFolder\" + e.Name);
}
Так что, когда файлы создаются в какую-нибудь папку и она готова использовать скопировать этот файл один за другим, но мне нужно, чтобы начать копирование, как только любой файл готов к использованию. Поэтому я думаю, что я должен использовать Threads. Итак .. Как реализовать параллельное копирование?
@ Крис
Проверить, если файл готов
public static bool IsFileReady(String sFilename)
{
// If the file can be opened for exclusive access it means that the file
// is no longer locked by another process.
try
{
using (FileStream inputStream = File.Open(sFilename, FileMode.Open, FileAccess.Read, FileShare.None))
{
if (inputStream.Length > 0)
{
return true;
}
else
{
return false;
}
}
}
catch (Exception)
{
return false;
}
}
Также слово предупреждения ... Я считаю, что созданное событие срабатывает, когда файл сначала создается. Если файл занимает некоторое время для создания, вы можете обнаружить, что вы пытаетесь обработать его до того, как он закончил писать ... – Chris
@ Крис посмотреть здесь, пока (! IsFileReady (e.FullPath)); – levi
D'oh! :) Как вы проверяете это из интереса? Я никогда не нашел особо хороших способов проверить это ... – Chris