2010-08-16 2 views
2

Я пытаюсь скопировать файл из одного места в другое с помощью SHFileOperation:SHFileOperation создает пустой каталог вместо файла

SHFILEOPSTRUCT fileop; 
fileop.hwnd = 0; 
fileop.wFunc = FO_COPY; 
fileop.pFrom = L"C:\\SomeDirectory\\SomeName.jpg\0"; 
fileop.pTo = L"C:\\SomeOtherDirectory\\SomeName.jpg\0"; 
fileop.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT; 
fileop.fAnyOperationsAborted = FALSE; 
fileop.hNameMappings = 0; 
fileop.lpszProgressTitle = 0; 
SHFileOperation(&fileop); 

Проблема заключается в том, что вместо того, чтобы получить копию SomeName.jpg в SomeOtherDirectory пустой каталог с именем SomeOtherDirectory \ SomeName.jpg создан, любые подсказки?

ответ

1

Для FO_COPY и FO_MOVE Операции pTo член SHFILEOPSTRUCT должно быть место, то есть каталог, а не пункт назначения файла. Каталогу разрешено не существовать, и в этом случае он создается, даже если он выглядит как имя файла.

Вы должны либо указать "C:\\SomeOtherDiretory\0", либо использовать FO_RENAME.

Что касается того, почему ваш файл не создан, вы проверили возвращаемое значение?

+0

Но MSDN (http://msdn.microsoft.com/en-us/library/bb759795%28VS.85%29.aspx) говорит, что 'pTo' is * Указатель на целевой файл или имя каталога *. – Naveen

+0

@Naveen: вы должны прочитать документацию для 'wFunc', а также посмотреть, как она используется. –

+0

Нет, это тоже не работает. Если папка указана в качестве адресата, для таких файлов ничего не происходит, они либо превращаются в папки, либо игнорируются SHFileOperation. Ошибка возникает только для некоторых файлов. Я работаю над этим следующим образом: 'if (! CopyFile (...)) SHFileOperation (...);' – GrayFace

Смежные вопросы