Вопрос Переименование папки в UNICODE

SBalykov

Старожил
Может кто-нибудь сталкивался с подобной проблемой и поможеет ее решить.
в общем
Код:
function RenameDir(const fromDir,toDir: String): Boolean;
begin
_fromDir:= RemoveBackslashUnlessRoot(fromDir) + #0#0;
_toDir:= RemoveBackslashUnlessRoot(toDir) + #0#0;
fos.wFunc:= FO_RENAME;
fos.fFlags:= FOF_FILESONLY or FOF_ALLOWUNDO or FOF_SILENT or FOF_NOCONFIRMATION;
fos.pFrom:= PAnsiChar(_fromDir);
fos.pTo:= PAnsiChar(_toDir);
Result:= (0 = ShFileOperation(fos));
end;
данная фунция на Unicode не работает. На Ansi, все нормально ...
Изменение String на AnsiString не работает ...
 
Последнее редактирование:

Хамик

Старожил
SBalykov, А так?
Код:
function RenameDir(const fromDir,toDir: AnsiString): Boolean;
begin
_fromDir:= RemoveBackslashUnlessRoot(fromDir) + #0#0;
_toDir:= RemoveBackslashUnlessRoot(toDir) + #0#0;
fos.wFunc:= FO_RENAME;
fos.fFlags:= FOF_FILESONLY or FOF_ALLOWUNDO or FOF_SILENT or FOF_NOCONFIRMATION;
fos.pFrom:= PAnsiChar(_fromDir);
fos.pTo:= PAnsiChar(_toDir);
Result:= (0 = ShFileOperation(fos));
end;
 

Krinkels

Он где то тут
Администратор
У меня работает. Версия инно во вложении
Код:
[Setup]
AppName=GetDeviceInfo
AppVerName=GetDeviceInfo
CreateAppDir=false
[Code]
type
#ifdef UNICODE
  PChar = PAnsiChar;
#endif
  TSHFileOpStruct =  record
  Wnd: HWND;
  wFunc: UINT;
  pFrom: PChar;
  pTo: PChar;
  fFlags: Word; // FILEOP_FLAGS;
  fAnyOperationsAborted: BOOL;
  hNameMappings: HWND; // Pointer;
  lpszProgressTitle: PChar; { only used if FOF_SIMPLEPROGRESS }
  end;
 
const
  FO_RENAME  = $0004;
  FOF_FILESONLY  = $0080;
  FOF_ALLOWUNDO  = $0040;
  FOF_SILENT  = $0004;
  FOF_NOCONFIRMATION  = $0010;

function SHFileOperation(const lpFileOp: TSHFileOpStruct):Integer; external 'SHFileOperation@shell32.dll stdcall';
 
function RenameDir(const fromDir, toDir: AnsiString): Boolean;
var
  fos: TSHFileOpStruct;
  _fromDir, _toDir: AnsiString;
begin
  _fromDir:= RemoveBackslashUnlessRoot(fromDir) + #0#0;
  _toDir  := RemoveBackslashUnlessRoot(toDir) + #0#0;
  fos.wFunc  := FO_RENAME;
  fos.fFlags := FOF_FILESONLY or FOF_ALLOWUNDO or FOF_SILENT or FOF_NOCONFIRMATION;
  fos.pFrom  := PChar(_fromDir);
  fos.pTo  := PChar(_toDir);
  Result := (0 = ShFileOperation(fos));
end;

function InitializeSetup: Boolean;
begin
    RenameDir( 'C:\321\Папка', 'C:\321\Folder' );
end;
 

Вложения

SBalykov

Старожил
Krinkels
Спасибо большое!
На Ansi переводит не совсем корректно.
Уже ничего не вижу, пропустил ...
Код:
function SHFileOperation(const lpFileOp:TSHFileOpStruct): Integer; external 'SHFileOperation{#A}@shell32.dll stdcall';
 
Последнее редактирование:
Сверху