Delphi renamefile не работает

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]
так это что правда оказалась.

Читайте также:  Как настроить фейк gps для андроида

ну вы батека даете)))

← →
-=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]
Ну и что, все равно надо закрыть.

Источник

Оцените статью