Delphi renamefile не работает
Подскажите пожалуйста, как переименовать папку в windows
Точнее нужно просто перевести её в название в нижний регистр, но это следует из возможности переименования папки.
Функция
Renamefile
не хочет переименовывать директории.
begin. end © ( 2005-03-14 13:11 ) [1]
> Darklight © (14.03.05 13:07)
У меня тоже Delphi 7 и Win2k, но RenameFile работает.
TUser © ( 2005-03-14 13:12 ) [2]
MoveFile, MoveFileEx, SHFileOperarion
Darklight © ( 2005-03-14 13:22 ) [3]
Уточню!
У меня не совсем Delphi 7 😉
У меня Delphi 9
и приложение под платформу .NET
🙁
Кстати
SHFileOperarion
В каком модуле находится?
Аналогичный вопрос
MoveFile, MoveFileEx
Просто кажется в Delphi 9 Dot Net их нет 🙁
TUser © ( 2005-03-14 13:48 ) [4]
ShellApi, но ее под дот нетом тоже не будет
Перевёл приложение по win32
Попробовал
Renamefile
Movefile
MovefileEx (с флагами 0 и 1)
Ничего не помогает.
ghg © ( 2005-03-14 13:59 ) [6]
а ты попробуй для обычной папки а не для windows
Darklight © ( 2005-03-14 14:14 ) [7]
Вот на всяк случай кусок кода программы, работающий с перенаименованием:
//BEGIN SOURCE CODE
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;
//BODY FUNCTIONS BEGIN
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
Данная часть программы переименовывает в нижний регистр имена всех файлов и папок в указанной папке (без «\»), включая все вложенные папки и файлы
Darklight © ( 2005-03-14 14:18 ) [8]
[6] Я не попку windows перименовываю 🙂
А в OS windows 2000 перименовываю папки .
🙂
TUser © ( 2005-03-14 16:05 ) [9]
> [6] Я не попку windows перименовываю 🙂
А ты все-таки попку попробуй 🙂
Fay © ( 2005-03-14 19:37 ) [11]
2 Darklight © (14.03.05 13:53) [5]
Чё тебе не помогает? Гениальные программистs GetLastError не используют?!
e-mike © ( 2005-03-14 23:41 ) [12]
> Fay © (14.03.05 19:37) [11]
нет там никакого error»a
Справку, юноша, читайте, делайте выводы..
function LowerCase(const S: string): string;
extern PACKAGE AnsiString __fastcall LowerCase(const AnsiString S);
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.
e-mike © ( 2005-03-14 23:42 ) [13]
это я к тому, что скорее всего русские буквы присутствуют..
Darklight © ( 2005-03-15 02:03 ) [14]
[12] Спасибо за напоминание.
Я в курсе.
Привык я к LowerCase UpperCase.
Мне абсолютно пофиг — все папки написаны исключительно английскими буквами (A — Z, a — z).
Тестовый пример:
t:\F\FOLDER1\Folder2\FolDer3
ну тогда, Fay, позвольте реабилитировать [11]
сеанс телепатии провалися=(
TUser © ( 2005-03-15 07:20 ) [16]
Здесь большая часть народа под win32 пишет. Может быть под .NET»ом какие-то особенности . А вообще — код давай.
Darklight © ( 2005-03-15 13:19 ) [17]
[16] Как я уже сказал — я под win32 уже всё перевёл.
А код см выше.
Anatoly Podgoretsky © ( 2005-03-15 13:29 ) [18]
MovefileEx должен помогать, это его назначение.
The MoveFileEx function renames an existing file or directory.
Vit@ly © ( 2005-03-15 13:44 ) [19]
Странно, почему эту не перенесли. Со вчерашнего дня висит.
Точнее нужно просто перевести её в название в нижний регистр
При чем здесь Delphi и его функции (Renamefile, Movefile, MovefileEx и др)?
Сначала бы следовало бы попробовать осуществмть это с помощью любого файл-менеджера и уяснить, что для Win (в отличии от «Сёв») это одно и тоже.
Vit@ly © ( 2005-03-15 13:45 ) [20]
Не успел дописать FOLDER == folder
_1 ( 2005-03-15 14:19 ) [21]
Проверил на Windows 2000
— обе строчки работают, и переименовывают папку с:\Temp в соответствующий регистр.
Источник
Delphi renamefile не работает
привет всем,
козалось бы , что может быть легче?
function RenameFile(const OldName, NewName: string): Boolean
в моём случае выглядит
RenameFile(gPthVl+»pro\user.pro»,gPthVl+»pro\user.old»);
где, gPthVl = e:\bst\pro или любой другой пить.
не могу добиться работы ф-ии.
подскажите , что не так?
Плохиш © ( 2005-08-16 12:03 ) [1]
Когда определишь, чему равны «?», всё поймёшь.
Думкин © ( 2005-08-16 12:04 ) [2]
«e:\bst\pro» + «pro\user.pro» = «e:\bst\propro\user.pro» должно быть так?
Tonich © ( 2005-08-16 12:05 ) [3]
ну если e:\bst\pro это твой путь хде pro это отдельная папка
и ты потом пытаешься к нему прибавить «pro\user.pro» и получается
e:\bst\propro\user.pro а вот «propro» эта папка то у тебя есть или ты просто забыл «\»
ну если ты забыл поставить «\»то получается e:\bst\pro\pro\user.pro 2 одноименные папки , какой-то бред ))
Tonich © ( 2005-08-16 12:09 ) [4]
не можно конечно но коряво как-то)
простите господа. переволновался
конечно же gPthVl = e:\bst\, но от эого не легче
-=snoop=- © ( 2005-08-16 12:11 ) [6]
a := «e:\bst\pro\user.pro» ;
b := «e:\bst\pro\user.old» ;
RenameFile(a,b);
не работаеть
bat00n ( 2005-08-16 12:14 ) [7]
func ChangeFileExt(FileName : string; Extension : string);
filename := «e:\bst\pro\user.pro»;
ChangeFileExt(filename, «old»);
-=snoop=- © ( 2005-08-16 12:16 ) [8]
bat00n
пробовал вот так, не заработало
ChangeFileExt(«e:\bst\pro\user.pro», «old»);
-=snoop=- © ( 2005-08-16 12:18 ) [9]
по Вашему тож не работает!)))))
щас машину перегружу.
> -=snoop=- © (16.08.05 12:11) [6]
>
> a := «e:\bst\pro\user.pro» ;
> b := «e:\bst\pro\user.old» ;
> RenameFile(a,b);
>
> не работаеть
Вот так просто «не работает» и ничего не говорит? Что говорит GetLastError?
Tonich © ( 2005-08-16 12:20 ) [11]
а может у него диска E нет )))))
bat00n ( 2005-08-16 12:27 ) [12]
Вот под рукой делфя, щас попробовал. Все работает:
a := «e:\bst\pro\user.pro» ;
ext := «.old»;
if not RenameFile(a, ChangeFileExt(a,ext))
then ShowMessage(«Фигу!»);
Slider007 © ( 2005-08-16 12:27 ) [13]
Tonich © (16.08.05 12:20) [11]
может у него ваще компа нет ?
-=snoop=- © ( 2005-08-16 12:28 ) [14]
2Tonich. и правда нет. чЁрт побери! ты меня спас!!))))
2Плохиш
GetLAstError ноль показывает
не прилично говорить о присутствующем в 3-м лице
Tonich © ( 2005-08-16 12:31 ) [16]
> Tonich © (16.08.05 12:20) [11]
так это что правда оказалась.
ну вы батека даете)))
-=snoop=- © ( 2005-08-16 12:34 ) [17]
да не правда это, есть у меня и комп, на удиление и диск Е: на нем тож есть. как ни странно.
Tonich © ( 2005-08-16 12:35 ) [18]
тохда в продолжение темы )))))
может это сидюк)))
-=snoop=- © ( 2005-08-16 12:38 ) [19]
2Tonich, не, скорее всего, потусторонние силы мешают головке винчестера попасть в сектор. какой телефон у охотников за приведеньями?
ладно уже стебаться
Думкин © ( 2005-08-16 12:41 ) [20]
> [19] -=snoop=- © (16.08.05 12:38)
Стебаешься пока ты. Что возвращает функция? Анализируется ли GetLastError? Каковы атрибуты файла?
-=snoop=- © ( 2005-08-16 12:46 ) [21]
2Думкин,
0.чем же я стебаю?
1.будь по внимательнее [14]
2.атрибуты пусты
3.для проверки, пробовал переписать файл в корень с: =0
вот весь код, хотя какой тут код.
procedure tform1.p_copyANDstr;
var
a, b : string ;
lstErr : integer ;
begin
a := «c:\user.pro» ;
//b := «e:\bst\pro\user.old» ;
ChangeFileExt(a, «.old»);
все в соответствии с хелпом дельфЁвым
Думкин © ( 2005-08-16 12:46 ) [22]
А руками — в проводнике, самому — каков результат?
-=snoop=- © ( 2005-08-16 12:50 ) [23]
руками дает, без проблем
-=snoop=- © ( 2005-08-16 12:51 ) [24]
a := «E:\bst\pro\user.pro» ;
b := «E:\bst\pro\user.old» ;
RenameFile(a,b);
getlasterror() вернул 32. поисчу коды ошибок.
Anatoly Podgoretsky © ( 2005-08-16 13:02 ) [25]
-=snoop=- © (16.08.05 12:29) [15]
не прилично говорить о присутствующем в 3-м лице
Тогда будет смешно выглядеть
Slider007 © (16.08.05 12:27) [13]
Tonich © (16.08.05 12:20) [11]
может у меня ваще компа нет ?
При чем тут его компьютер?
Плохиш © ( 2005-08-16 13:02 ) [26]
Anatoly Podgoretsky © ( 2005-08-16 13:03 ) [27]
-=snoop=- © (16.08.05 12:51) [24]
Закрой файлики перед переименованием.
-=snoop=- © ( 2005-08-17 05:58 ) [28]
2Плохиш , да ладно, дядя, что за бред! «нет буквы е:», ты сам-то представляешь такую ситуацию? бред какой-то! еще и вруном назвали.
2Anatoly Podgoretsky, я его и не открывал.
Думкин © ( 2005-08-17 06:46 ) [29]
> -=snoop=- © (17.08.05 05:58) [28]
Что-то не так в городе датском. Диагностика такого уровня на расстоянии — дело дорогое. Вы бы все-таки напряглись сами — немного, для начала.
Anatoly Podgoretsky © ( 2005-08-17 19:55 ) [30]
-=snoop=- © (17.08.05 05:58) [28]
Ну и что, все равно надо закрыть.
Источник