Сразу говорю: получаю ошибки при тестировании проги на удаленных компах ( отчет через сокеты ) Вопросы: 1. ERROR_NO_MORE_FILES ошибка что означает? 2. ERROR_SHARING_VIOLATION - относится к файлу source или target? Много раз компилить прогу и заносить ее на другой комп возможности нету, сами понимаете, так что прошу помощи!!
- файлы кончились (на подобе FindFirstFile, FindNextFile когда перечислены все файлы - это не ошибка). - проблема при доступе к открытому файлу в монопольном режиме. 1. Исправление зависит от ситуации. 2. Подойдет статья Ms-rem про доступ к таким файлам.
Где файлы кончились? Перемещается файл из одного места в другое. Вот если бы ERROR_PATH_NOT_EXIST тогда другое дело. Ну это и так понятно. Я спрашивал к какому файлу относится
2) может быть и сурс, и таргет, т.к. они оба открываются через NtCreateFile ЗЫ: А как ты при вызове одной функции получаешь две разные ошибки?
- блин че так нервничать вот исходник функции: Код (Text): BOOL STDCALL MoveFileExW (LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName, DWORD dwFlags) { return MoveFileWithProgressW (lpExistingFileName, lpNewFileName, NULL, NULL, dwFlags); } BOOL STDCALL MoveFileWithProgressW ( LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName, LPPROGRESS_ROUTINE lpProgressRoutine, LPVOID lpData, DWORD dwFlags ) { .......Bla bla bla if (folder==FALSE) { Result = CopyFileExW (lpExistingFileName, lpNewFileName, lpProgressRoutine, lpData, NULL, FileRename->ReplaceIfExists ? 0 : COPY_FILE_FAIL_IF_EXISTS); if (Result) { /* Cleanup the source file */ Result = DeleteFileW (lpExistingFileName); } } else { /* move folder code start */ WIN32_FIND_DATAW findBuffer; LPWSTR lpExistingFileName2 = NULL; LPWSTR lpNewFileName2 = NULL; LPWSTR lpDeleteFile = NULL; INT size; INT size2; BOOL loop = TRUE; BOOL Result = FALSE; INT max_size = MAX_PATH; /* Build the string */ size = wcslen(lpExistingFileName); if (size+6> max_size) max_size = size + 6; lpDeleteFile = (LPWSTR) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,max_size * sizeof(WCHAR)); if (lpDeleteFile == NULL) return FALSE; lpNewFileName2 = (LPWSTR) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,max_size * sizeof(WCHAR)); if (lpNewFileName2 == NULL) { HeapFree(GetProcessHeap(),0,(VOID *) lpDeleteFile); return FALSE; } lpExistingFileName2 = (LPWSTR) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,max_size * sizeof(WCHAR)); if (lpNewFileName2 == NULL) { HeapFree(GetProcessHeap(),0,(VOID *) lpNewFileName2); HeapFree(GetProcessHeap(),0,(VOID *) lpDeleteFile); return FALSE; } wcscpy( (WCHAR *)lpExistingFileName2,lpExistingFileName); wcscpy( (WCHAR *)&lpExistingFileName2[size],L"\\*.*\0"); /* Get the file name */ memset(&findBuffer,0,sizeof(WIN32_FIND_DATAW)); hFile = FindFirstFileW(lpExistingFileName2, &findBuffer); --- А ЭТО ЧЕ НЕ ПОИСК ФАЙЛА А? if (hFile == NULL) loop=FALSE; ..... 1ая Проблема. - описание в куске кода выше. 2ая Проблема. gilg уже все сказал. Решение проблем: пиши свою функцию - тогда ты точно будешь знать причины.
Недавно заметил, что MoveFileEx не пашет на Windows 95. Поменял на DeleteFile + MoveFile. Видать, в реализации расширенной версии этой функции всегда были баги.