SH.Wnd := Self.Handle;
SH.wFunc := FO_MOVE;
st := edtOutFiles.Text + Folder.DownFolders[j];
SH.pFrom := PWideChar(st);
st := edtPath.Text + Folder.Name + '\';
SH.pTo := PWideChar(st);
SH.fFlags := FOF_NOCONFIRMATION + FOF_RENAMEONCOLLISION;
SH.fAnyOperationsAborted := False;
SH.hNameMappings := nil;
SH.lpszProgressTitle := nil;
SHFileOperation(SH);
Ошибка при перемещении файлов
Перемещаю с помощью SHFileOperation() каталоги с файлами:
Код:
Выполняя программу на висте вылетает сообщение о невозможности перемещения элемента. Причем название элемента на китайском языке. Естественно такого файла не существует. В чем может быть проблема и как ее решить? Зарание спасибо.
http://msdn.microsoft.com/en-us/library/bb762164(VS.85).aspx
...
Copies, moves, renames, or deletes a file system object. This function has been replaced in Windows Vista by IFileOperation.
...
читаем msdn
...
Copies, moves, renames, or deletes a file system object. This function has been replaced in Windows Vista by IFileOperation.
...
Код:
[COLOR=Red]st[/COLOR] := edtOutFiles.Text + Folder.DownFolders[j];
SH.pFrom := [COLOR=Red]PWideChar(st)[/COLOR];
[COLOR=Red]st[/COLOR] := edtPath.Text + Folder.Name + '\';
SH.pTo := [COLOR=Red]PWideChar(st)[/COLOR];
SH.pFrom := [COLOR=Red]PWideChar(st)[/COLOR];
[COLOR=Red]st[/COLOR] := edtPath.Text + Folder.Name + '\';
SH.pTo := [COLOR=Red]PWideChar(st)[/COLOR];
За указателями следить будем, или как?
Виноват! Исправился, на висте все заработало без сучка и задоринки. Но на сервере 2003 периодически выскакивают глюки:(
Код:
var
SH: TSHFILEOPSTRUCT;
sFrom, sTo: string;
begin
sFrom := 'D:\Все папки\1Б_32';
sTo := 'D:\Перемещеные папки\175\';
SH.Wnd := Self.Handle;
SH.wFunc := FO_MOVE;
SH.pFrom := PWideChar(sFrom);
SH.pTo := PWideChar(sTo);
SH.fFlags := FOF_NOCONFIRMATION;
SH.fAnyOperationsAborted := False;
SH.hNameMappings := nil;
SH.lpszProgressTitle := nil;
if DirectoryExists(sFrom) and DirectoryExists(sTo) then
SHFileOperation(SH);
SH: TSHFILEOPSTRUCT;
sFrom, sTo: string;
begin
sFrom := 'D:\Все папки\1Б_32';
sTo := 'D:\Перемещеные папки\175\';
SH.Wnd := Self.Handle;
SH.wFunc := FO_MOVE;
SH.pFrom := PWideChar(sFrom);
SH.pTo := PWideChar(sTo);
SH.fFlags := FOF_NOCONFIRMATION;
SH.fAnyOperationsAborted := False;
SH.hNameMappings := nil;
SH.lpszProgressTitle := nil;
if DirectoryExists(sFrom) and DirectoryExists(sTo) then
SHFileOperation(SH);
Чтобы из ACSII-строки образовать Юникод, делайте так: PWideChar( WideString( sTo ) ).
Компилятор никаких предупреждений не выдает. На сколько я знаю в Delphi 2010 тип string приравнен к типу WideString. Тем не менее попробовал сделать по вашему. Не помогло. Та же ошибка:(
Есть подозрение, что используется неюникодная TSHFileOpStruct. Т.е. созданная на основе SHFILEOPSTRUCTA. Посмотри, как она объявлена.
Код:
SH.pFrom := PWideChar(sFrom + #0);