Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка при перемещении файлов

20K
06 июня 2010 года
HowlingWind
32 / / 13.01.2008
Всем привет!

Перемещаю с помощью SHFileOperation() каталоги с файлами:
Код:
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);


Выполняя программу на висте вылетает сообщение о невозможности перемещения элемента. Причем название элемента на китайском языке. Естественно такого файла не существует. В чем может быть проблема и как ее решить? Зарание спасибо.
339
07 июня 2010 года
verybadbug
619 / / 12.09.2005
читаем msdn 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.
...
303
07 июня 2010 года
makbeth
1.0K / / 25.11.2004
HowlingWind,
 
Код:
[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];

За указателями следить будем, или как?
20K
07 июня 2010 года
HowlingWind
32 / / 13.01.2008
Виноват! Исправился, на висте все заработало без сучка и задоринки. Но на сервере 2003 периодически выскакивают глюки:(
20K
23 июня 2010 года
HowlingWind
32 / / 13.01.2008
И все таки проблема осталась:( Есть папка "1Б_32" на которой стабильно происходит ошибка: "Не удалось найти этот элемент. Его больше нет в "непонятные символы". Проверьте расположение этого элемента и повторите попытку." После нажатия кнопки повторить папка нормально перемещается. Папка пустая.

Код:
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);
253
23 июня 2010 года
Proger_XP
1.5K / / 07.08.2004
Вас не смущает конверсия для sTo/sFrom String -> P[COLOR="Red"]Wide[/COLOR]Char? Даже компилятор должен выдавать предупреждение типа Suspicious conversion.

Чтобы из ACSII-строки образовать Юникод, делайте так: PWideChar( WideString( sTo ) ).
20K
23 июня 2010 года
HowlingWind
32 / / 13.01.2008
Компилятор никаких предупреждений не выдает. На сколько я знаю в Delphi 2010 тип string приравнен к типу WideString. Тем не менее попробовал сделать по вашему. Не помогло. Та же ошибка:(
303
23 июня 2010 года
makbeth
1.0K / / 25.11.2004
Есть подозрение, что используется неюникодная TSHFileOpStruct. Т.е. созданная на основе SHFILEOPSTRUCTA. Посмотри, как она объявлена.
20K
23 июня 2010 года
HowlingWind
32 / / 13.01.2008
Проблема решена. Нужно было сделать
 
Код:
SH.pFrom := PWideChar(sFrom + #0);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог