Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Переименовать директорию (папку) в windows [D7, Win2k]


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо