Копирование файлов по сети
Как осуществить программно копирование файлов по сети из одной расшаренной папки в другую? Если можно, то пожалуйста с примером и комментариями.
CopyFile("\\\\COMPUTER1\\SHAREDFOLDER1\\FILE.TXT", "\\\\COMPUTER2\\SHAREDFOLDER2\\FILE.TXT", FALSE);
Такой метод подойдёт?
Можно ещё помучать функцию CopyFileEx();
BOOL CopyFileEx(
LPCTSTR lpExistingFileName, // name of existing file
LPCTSTR lpNewFileName, // name of new file
LPPROGRESS_ROUTINE lpProgressRoutine, // callback function
LPVOID lpData, // callback parameter
LPBOOL pbCancel, // cancel status
DWORD dwCopyFlags // copy options
);
LPPROGRESS_ROUTINE lpProgressRoutine, // callback function
LPVOID lpData, // callback parameter
и
DWORD dwCopyFlags // copy options
- можно как нибудь подробнее?
Честно говоря, не думал что CopyFile работает в сети! Спасибо, проверю. А вот насчет
LPPROGRESS_ROUTINE lpProgressRoutine, // callback function
LPVOID lpData, // callback parameter
и
DWORD dwCopyFlags // copy options
- можно как нибудь подробнее?
Согласно MSDN, [FONT=courier new]CopyFileEx()[/FONT] копирует файл "в новый файл" :), сохраняя при этом расширенные атрибуты файла-оригинала, структурированные OLE-хранилища (что это такое, я не знаю :)), альтернативные потоки NTFS. Security-атрибуты при этом не копируются. lpProgressRoutine -- указатель на функцию, которая будет вызываться функцией CopyFileEx() для отображения прогресс-индикатора, она должна иметь такой вид:
DWORD CALLBACK CopyProgressRoutine(
LARGE_INTEGER TotalFileSize, // file size
LARGE_INTEGER TotalBytesTransferred, // bytes transferred
LARGE_INTEGER StreamSize, // bytes in stream
LARGE_INTEGER StreamBytesTransferred, // bytes transferred for stream
DWORD dwStreamNumber, // current stream
DWORD dwCallbackReason, // callback reason
HANDLE hSourceFile, // handle to source file
HANDLE hDestinationFile, // handle to destination file
LPVOID lpData // from CopyFileEx
);
Коллбэк-параметр lpData, имеющий тип void*, просто передаётся функцией CopyFileEx в нашу CopyProgressRoutine(), т.е. мы можем его использовать для передачи указателя на какую-нибудь нашу хитрую структуру, если такое нам потребуется.
dwCopyFlags -- это как нам копировать, может представлятькомбинацию из следующих констант:
COPY_FILE_FAIL_IF_EXISTS --понятно, если файл уже существует, то облом;
COPY_FILE_RESTARTABLE -- типа, если произошёл сбой, вызванная в следующий раз CopyFileEx с теми же параметрами lpExistingFileName и lpNewFileName по усмотрению системы может копироваться не с начала, а с того места, где произошёл облом.