Копирование нескольких файлов "средствами ОС"

SKR

Нужно скопировать множество файлов, но с отображением системного окна процесса копирования.Один файл скопировать легко:
My.Computer.FileSystem.CopyFile(SrsFile, DstFile)
Т.е. нужно скормить ОС массив файлов, что бы она сама занималась расчетом времени, отображением общего процесса и т.п.
3 ответа

SKR

https://msdn.microsoft.com/en-us/library/windows/desktop/aa363852(v=vs.85).aspxмассив файлов копируют в цикле


SKR

Roman Mejtes,CopyFileEx -предполагает возврат % копирования в CallBack, а уж кодописатель сам мухлюет со свистелкамиТС спрашивал про системное (от слова Operation System) окно.SHFileOperation functionSKR,почитай про эту ф-цию и может там рядом еще какие есть.Даю тупо мой код (спойлер ниже), но я его в основном использую для копирования папок с файлами (когда ощутимое время ждать приходится, и вывод диалога имеет смысл). Чтоб набор-массив исходных файлов абы откуда попало, из разных папок я не делал.Хотя вот идея.SHFILEOPSTRUCT structure
Type: PCZZTSTRNote This string must be ******-null terminated.A pointer to one <u>or more source file names</u>. These names should be fully qualified paths to prevent unexpected results.
<pre class="prettyprint linenums"> 'wFunc - A value that indicates which operation to perform Public Const FO_MOVE = &H1 Public Const FO_COPY = &H2 Public Const FO_DELETE = &H3 Public Const FO_RENAME = &H4 'fFlags - Flags that control the file operation 'Preserve undo information, if possible (класть в корзину) Public Const FOF_ALLOWUNDO = &H40 'Respond with Yes to All for any dialog box that is displayed Public Const FOF_NOCONFIRMATION = &H10 'Do not ask the user to confirm the creation of a new directory if required Public Const FOF_NOCONFIRMMKDIR = &H200 'Do not copy the security attributes of the file. 'The destination file receives the security attributes of its new folder. Public Const FOF_NOCOPYSECURITYATTRIBS = &H800 'Do not display a dialog to the user if an error occurs. Public Const FOF_NOERRORUI = &H400 'Do not display a progress dialog box. Public Const FOF_SILENT = &H4 'Display a progress dialog box but do not show individual file names as they are operated on. Public Const FOF_SIMPLEPROGRESS = &H100 'Windows Vista. Perform the operation silently, presenting no UI to the user. Public Const FOF_NO_UI = FOF_SILENT Or FOF_NOCONFIRMATION Or FOF_NOCONFIRMMKDIR Or FOF_NOERRORUI <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> Public Structure SHFILEOPSTRUCT Dim hwnd As IntPtr Dim wFunc As Integer Dim pFrom As String Dim pTo As String Dim fFlags As Short Dim fAnyOperationsAborted As Boolean Dim hNameMappings As IntPtr Dim lpszProgressTitle As String End Structure Public Function ShellCopyFileFolder(ByVal strSource As String, ByVal strTarget As String, _ Optional ByVal bMove As Boolean = False, _ Optional ByVal bSilent As Boolean = True, _ Optional ByVal bNoConfirmMakeDir As Boolean = True, _ Optional ByVal bNoConfirm As Boolean = True, _ Optional ByVal bNoShowErrors As Boolean = True, _ Optional ByVal bNoCopySecurityAttribs As Boolean = True) As Boolean 'bMove -использовать Move вместо Copy 'bSilent - не показывать диалог копирования 'bNoConfirmMakeDir -создавать папку, куда копировать без подтверждения 'bNoConfirm -не задавать пользователю лишних вопросов 'bNoShowErrors -не выводить диалоги про ошибки 'bNoCopySecurityAttribs - не копировать права на исх. файлы и папки 'ВАЖНО!!! при копировании папок 'если папка strTarget существует, то папка с именем strSource копируется в strTarget 'если папка strTarget НЕ существует, то она создается в strTarget и туда копируется содержимое strSource Dim SHFileOp As New SHFILEOPSTRUCT ' structure To pass To the Function Dim dwRes As Integer 'коррекция strSource = InCorrectDir(strSource) & Chr(0) & Chr(0) 'убираем "\" на конце и добавляем "\0\0" strTarget = InCorrectDir(strTarget) 'убираем "\" на конце With SHFileOp If bMove Then .wFunc = FO_MOVE Else .wFunc = FO_COPY End If .pFrom = strSource .pTo = strTarget If bSilent Then .fFlags = .fFlags Or FOF_SILENT If bNoConfirmMakeDir Then .fFlags = .fFlags Or FOF_NOCONFIRMMKDIR If bNoConfirm Then .fFlags = .fFlags Or FOF_NOCONFIRMATION If bNoShowErrors Then .fFlags = .fFlags Or FOF_NOERRORUI If bNoCopySecurityAttribs Then .fFlags = .fFlags Or FOF_NOCOPYSECURITYATTRIBS End With dwRes = SHFileOperation(SHFileOp) 'If dwRes <> 0 Then Debug.Print "SHFileOperation Error " & CStr(dwRes) ShellCopyFileFolder = (dwRes = 0) End Function </pre>


SKR

Сорри, забыл декларацию самой ф-ции под спойлер засунуть.
Public Declare Unicode Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationW" _
 (ByRef lpFileOp As SHFILEOPSTRUCT) As Integer