Как открыть встроенный диалог копирования файлов?

Я буду копировать большой файл по сети, используя мое приложение winforms, и мне нужно показать какой-то индикатор выполнения. Вместо того, чтобы готовить мою собственную процедуру копирования, я думал, что было бы лучше просто показать встроенный диалог копирования файлов.

Мне также понадобится уведомление "Копировать полное" и "Копировать не удалось".

Мне нужно, чтобы это работало в Windows XP, Vista и 7. Есть ли способ позвонить, чтобы задействовать эту функцию из моего кода С#?

Ответы

Ответ 1

Ответ взят из: http://msdn.microsoft.com/en-us/magazine/cc163304.aspx

Windows Vista действительно включает новый механизм копирования, который поддерживает именно то, что вы ищете. Однако возможно, что ранее существовавшая функциональность может удовлетворить ваши потребности. Например, если вы хотите скопировать, переместить, переименовать или удалить отдельный файл или каталог, вы можете воспользоваться SHFileOperation (открытым из shell32.dll), который уже завершен средой выполнения Visual Basic®. Если вы используете Visual Basic 2005, вы можете просто использовать функциональные возможности из пространства имен My, например:

 My.Computer.FileSystem.CopyDirectory(
   sourcePath, destinationPath, UIOption.AllDialogs)

Выполнение одной и той же функции на С# требует лишь немного дополнительной работы, добавляя ссылку на Microsoft.VisualBasic.dll(из каталога установки Microsoft®.NET Framework) и используя следующий код:

using Microsoft.VisualBasic.FileIO;
...
FileSystem.CopyDirectory(
    sourcePath, destinationPath, UIOption.AllDialogs);

При запуске это приведет к тому же самому пользовательскому интерфейсу прогресса, который вы увидите, если вы делаете те же операции с файлами из проводника Windows. Фактически, при работе в Windows Vista вы автоматически получаете новый интерфейс прогресса Windows Vista, как показано на рисунке 1. Dialog