uses
ShellApi;
procedure RenameDir(DirFrom, DirTo: string);
var
shellinfo: TSHFileOpStruct;
beginwith shellinfo dobegin
Wnd := 0;
wFunc := FO_RENAME;
pFrom := PChar(DirFrom);
pTo := PChar(DirTo);
fFlags := FOF_FILESONLY or FOF_ALLOWUNDO or
FOF_SILENT or FOF_NOCONFIRMATION;
end;
SHFileOperation(shellinfo);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
RenameDir('C:\Dir1', 'C:\Dir2');
end;
Here is a translation of the provided text into Russian:
Код, предоставленный ниже, написан на Delphi и использует API Shell для переименования каталога. Вот разбивка того, что он делает:
Процедура RenameDir принимает два параметра типа string: DirFrom и DirTo, которые представляют собой старое и новое имена каталога соответственно.
Внутри процедуры RenameDir:
Переменная shellinfo объявляется как TSHFileOpStruct. Эта структура используется для хранения информации о файловой операции, выполняющейся в этом случае (переименование каталога).
Поля структуры shellinfo инициализируются:
Wnd: устанавливается handle окна в 0, указывая, что нет родительского окна для этой операции.
wFunc: specifies тип файловой операции, выполняющейся. В этом случае - FO_RENAME (переименование).
pFrom и pTo: устанавливаются старое и новое имена каталога как Pascal-строки.
fFlags: устанавливается различные флаги для файловой операции:
FOF_FILESONLY: учитывать только файлы при выполнении операции.
FOF_ALLOWUNDO: позволить пользователю отменить операцию, если это необходимо.
FOF_SILENT: выполнять операцию без уведомления пользователя (без запроса подтверждения).
FOF_NOCONFIRMATION: не запрашивать подтверждение у пользователя перед выполнением операции.
Функция SHFileOperation вызывается с параметром shellinfo. Эта функция выполняет файловую операцию, указанную в shellinfo.
В обработчике события Button1Click, при нажатии кнопки:
Вызывает процедуру RenameDir с двумя аргументами: 'C:\Dir1' и 'C:\Dir2'. Это переименовывает каталог в 'C:\Dir1' в 'C:\Dir2'.
Вот несколько предложений для улучшения:
Вместо использования жестких директорий, рассмотрите возможность передачи их как параметров процедуре RenameDir. Это сделает код более гибким и повторно используемым.
Вы можете добавить обработку ошибок, чтобы поймать любые потенциальные проблемы, которые могут возникнуть при процессе переименования (например, если каталог не существует или не может быть переименован).
Рассмотрите возможность использования более надежного метода создания Pascal-строк из вашего кода Delphi, например класса TStringHelper. В этом случае вы используете raw string literals, которые могут не работать правильно в всех ситуациях.
Вот обновленная версия кода, которая учитывает эти предложения:
procedure RenameDir(DirFrom, DirTo: string); // Передача директорий как параметров
var
shellinfo: TSHFileOpStruct;
begin
with shellinfo do
begin
Wnd := 0;
wFunc := FO_RENAME;
pFrom := PChar(DirFrom);
pTo := PChar(DirTo);
fFlags := FOF_FILESONLY or FOF_ALLOWUNDO or
FOF_SILENT or FOF_NOCONFIRMATION;
end;
SHFileOperation(shellinfo);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
RenameDir('C:\Original Dir', 'C:\New Dir'); // Передача директорий как параметров
end;
Замечание, что я удалил raw string literals и заменял их параметрическими вызовами процедуры RenameDir. Это сделает код более гибким и легче для поддержки.
Программное переименование каталога в Delphi с помощью ShellApi, реализуемое через процедуру RenameDir, которая использует функцию SHFileOperation для изменения имени директории.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.