![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Переименовать директорию (папку) в windows [D7, Win2k]
Darklight © (2005-03-14 13:07:00)Подскажите пожалуйста, как переименовать папку в windows
Точнее нужно просто перевести её в название в нижний регистр, но это следует из возможности переименования папки.
Функция
Renamefile
не хочет переименовывать директории.
_1 (2005-03-15 14:19:00) [1]Проверил на Windows 2000
c:\TEMP - папка
RenameFile('c:\TEMP', 'c:\temp')
RenameFile('c:\temp', 'c:\TEMP')
- обе строчки работают, и переименовывают папку с:\Temp в соответствующий регистр.
Vit@ly (2005-03-15 13:45:00) [2]Не успел дописать FOLDER == folder
Vit@ly (2005-03-15 13:44:00) [3]Странно, почему эту не перенесли. Со вчерашнего дня висит.
Точнее нужно просто перевести её в название в нижний регистр
При чем здесь Delphi и его функции (Renamefile, Movefile, MovefileEx и др)?
Сначала бы следовало бы попробовать осуществмть это с помощью любого файл-менеджера и уяснить, что для Win (в отличии от "Сёв") это одно и тоже.
Anatoly Podgoretsky (2005-03-15 13:29:00) [4]MovefileEx должен помогать, это его назначение.
The MoveFileEx function renames an existing file or directory.
Darklight (2005-03-15 13:19:00) [5][16] Как я уже сказал - я под win32 уже всё перевёл.
А код см выше.
TUser (2005-03-15 07:20:00) [6]Здесь большая часть народа под win32 пишет. Может быть под .NET'ом какие-то особенности ... А вообще - код давай.
e-mike (2005-03-15 02:10:00) [7]ну тогда, Fay, позвольте реабилитировать [11]
сеанс телепатии провалися=(
Darklight (2005-03-15 02:03:00) [8][12] Спасибо за напоминание.
Я в курсе.
Привык я к LowerCase UpperCase.
Мне абсолютно пофиг - все папки написаны исключительно английскими буквами (A - Z, a - z).
Тестовый пример:
t:\F\FOLDER1\Folder2\FolDer3
e-mike (2005-03-14 23:42:00) [9]это я к тому, что скорее всего русские буквы присутствуют..
e-mike (2005-03-14 23:41:00) [10]
> Fay © (14.03.05 19:37) [11]
нет там никакого error'a
Darklight
Справку, юноша, читайте, делайте выводы..
Delphi syntax:
function LowerCase(const S: string): string;
C++ syntax:
extern PACKAGE AnsiString __fastcall LowerCase(const AnsiString S);
Description
LowerCase returns a string with the same text as the string passed in S, but with all letters converted to lowercase. The conversion affects only 7-bit ASCII characters between 'A' and 'Z'. To convert 8-bit international characters, use AnsiLowerCase.
Fay (2005-03-14 19:37:00) [11]2 Darklight © (14.03.05 13:53) [5]
Чё тебе не помогает? Гениальные программистs GetLastError не используют?!
Darklight (2005-03-14 19:09:00) [12][9]
Попробовал!
Не помоголо!
TUser (2005-03-14 16:05:00) [13]
> [6] Я не попку windows перименовываю :)
А ты все-таки попку попробуй :)
Darklight (2005-03-14 14:18:00) [14][6] Я не попку windows перименовываю :)
А в OS windows 2000 перименовываю папки !!!
:)
Любые...
Darklight (2005-03-14 14:14:00) [15]Вот на всяк случай кусок кода программы, работающий с перенаименованием:
//BEGIN SOURCE CODE
//HEADER BEGIN
unit U_Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, StrUtils, FileCtrl, ShellApi;
type
TWinForm = class(TForm)
Edit1: TEdit;
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
WinForm: TWinForm;
//HEADER END
//BODY FUNCTIONS BEGIN
implementation
function FindFiles(Path,Mask : String): TStrings;
Var F: TSearchRec;
Dirs,More : TStrings;
i : Integer;
begin
Result := TStringList.Create;
if FindFirst(Path+Mask,faReadOnly and faHidden and faSysFile and faArchive,F)=0 Then
begin
Result.add(Path+F.Name);
while (FindNext(F)=0) do
begin
Result.add(Path+F.Name);
end;
end;
if FindFirst(Path+'*.*',faDirectory,F)=0 Then
begin
Dirs := TStringList.Create;
if (F.Name<>'.') and (F.Name <> '..') Then
Dirs.add(Path+F.Name);
while (FindNext(F)=0) do
begin
if (F.Name='.') or (F.Name = '..') Then
continue;
Dirs.add(Path+F.Name);
end;
for i := 1 to Dirs.Count do
begin
Result.Add(Dirs.Strings[i-1]);
More := FindFiles(Dirs.Strings[i-1]+'\',Mask);
Result.AddStrings(More);
More.Free;
end;
Dirs.Free;
end;
end;
procedure LowerCaseFiles(Files : TStrings);
Var i : Integer;
s1,s2,s3,s4,s5 : String;
begin
for i:=1 to Files.Count do
begin
s1 := Files.Strings[i-1];
if DirectoryExists(s1) then
begin
s2 := ExtractFileName(s1);
s3 := ExtractFilePath(s1);
s4 := lowercase(s2);
s5 := s3+s4;
//RenameFile(s1,s5);
if MoveFile(PChar(s1),PChar(s5)) then
beep;
end
else
if FileExists(s1) then
begin
s2 := ExtractFileName(s1);
s3 := ExtractFilePath(s1);
s4 := lowercase(s2);
s5 := s3+s4;
RenameFile(s1,s5);
end;
end;
end;
//BODY FUNCTIONS END
//BODY EVENT METHODS BEGIN
procedure TWinForm.Button2Click(Sender: TObject);
Var Files: TStrings;
begin
Files := FindFiles(Edit1.Text+'\','*.*');
LowerCaseFiles(Files);
Files.Free;
end;
//BODY EVENT METHODS END
//END SOURCE CODE
//Комментарии
Данная часть программы переименовывает в нижний регистр имена всех файлов и папок в указанной папке (без "\"), включая все вложенные папки и файлы
ghg (2005-03-14 13:59:00) [16]а ты попробуй для обычной папки а не для windows
Darklight (2005-03-14 13:53:00) [17]Перевёл приложение по win32
Попробовал
Renamefile
Movefile
MovefileEx (с флагами 0 и 1)
Ничего не помогает.
TUser (2005-03-14 13:48:00) [18]ShellApi, но ее под дот нетом тоже не будет
Darklight (2005-03-14 13:22:00) [19]Уточню!
У меня не совсем Delphi 7 ;)
У меня Delphi 9
и приложение под платформу .NET
:(
Кстати
SHFileOperarion
В каком модуле находится?
Аналогичный вопрос
MoveFile, MoveFileEx
Просто кажется в Delphi 9 Dot Net их нет :(
TUser (2005-03-14 13:12:00) [20]MoveFile, MoveFileEx, SHFileOperarion