Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > сохранить файл


Автор: Балбес 7.12.2004, 17:08
Привет всем!
Подскажите какой код использовать чтобы при сохранении файла учитывалось, что если там уже есть файл с таким именем, то сохранять новый файл с именем (1) или с именем (2) и т.д.
smile

Автор: Dimich 7.12.2004, 17:11
1. Функцией FileExist (FileName : string) проверяешь, есть ли уже такой файл.
2. Изменяешь имя файла и снова на пункт 1 пока не получишь уникальное имя файла

Автор: Полудненко Олег 7.12.2004, 17:13
Проверяеш существование файла функцией FileExists(Name:String):boolean, где Name - имя файла. Если файл существует то в цикле начинаеш подбирать нужную цифру.

Автор: Балбес 7.12.2004, 18:42
Покажите пример пожалуйста, а то у меня не получается...
вот с этим:
memo1.Lines. SaveToFile

Автор: PZ 7.12.2004, 18:59
Надо указать имя файла:

memo1.Lines. SaveToFile('MyFile.txt') ;

Автор: Zero 7.12.2004, 19:32
Цитата(PZ @ 7.12.2004, 18:59)
memo1.Lines. SaveToFile('MyFile.txt') ;

Не совсем корректно написано, более правильно будет так:
Код

memo1.Lines. SaveToFile('<Путь>+MyFile.txt');
Пример:
Код

memo1.Lines. SaveToFile('c:\MyFile.txt');

Автор: RA 7.12.2004, 19:50
Код

var
f1,F2:string;

begin
F1:='C:\my.Txt';
F2:=F1;
I:=0;


while fileExists(F1)  do
begin
F1:=F2+'('+ IntToStr(i) + ')';
inc(i);

end;

memo1.Lines. SaveToFile(F1);

end;

Автор: SlaUr 8.12.2004, 05:32
Function WhatFileName(path:string):string; http://slaur.narod.ru/delphi/mysys.rar

Автор: EKoshelev 8.12.2004, 09:21
RAdmin
Только номера будут после расширения добавляться...

[/code]
Код

procedure SaveFile(FName: string);
var
     nam1, nam2, NewFN: string;
     p, i: integer;
begin
 p := Pos('.', FName);
 nam1 := Copy(FName, 1, p - 1);
 nam2 := Copy(FName, p, Length(FName) - p + 1);
 // хотя легко можно сделать, чтобы этот фрагмент глюканул

 i := 1;
 NewFN := nam1 + nam2;
 while FileExists(NewFN) do
 begin
   NewFN := nam1 + '(' + IntToStr(i) + ')' + nam2;
   inc(i);
 end;

 Memo1.Lines.SaveToFile(NewFN);
end;[code=delphi]

Автор: RA 8.12.2004, 18:55
EKoshelev да чёто както я забыл забы. smile

Автор: z-END 10.12.2004, 17:14
Код

function UniqueFile(S: TFileName):TFileName;
var
x: Integer;
Dir, FName, Ext: String;
begin
Dir := ExtractFIlePath(S);
FName := ChangeFileExt (ExtractFIleName(S), '');
Ext := ExtractFileExt(S);
x:=1;
Result := S;
 while fileexists (Result) do
  begin
    Result := Dir + FName + '_' + inttostr (x) + Ext;
 Inc(x);
end;
end;

Пример использования:
Код

memo1.Lines. SaveToFile (UniqueFile ('c:\MyFile.txt'));


Автор: Medved 11.12.2004, 15:28
Цитата(Zero @ 7.12.2004, 22:32)
Цитата(PZ @ 7.12.2004, 18:59)
memo1.Lines. SaveToFile('MyFile.txt') ;

Не совсем корректно написано, более правильно будет так:
Код

memo1.Lines. SaveToFile('<Путь>+MyFile.txt');
Пример:
Код

memo1.Lines. SaveToFile('c:\MyFile.txt');

Так тоже работать будет.

Автор: Vladimir13 14.12.2004, 09:04
а если так:
var i:integer;
p,path,filename,format:string;
begin
if i=o then p:='';
if i>0 then p:=IntToStr(i);
while FileExists(NewFileName) do
begin
NewFileName := path +Filename+p+format;
inc(i);
end;
Memo1.Lines.saveToFile(Newfilename);
end;
//format='.txt'

Автор: Zero 15.12.2004, 01:56
Цитата(Pegas @ 11.12.2004, 15:28)
Так тоже работать будет.

А ну да, чё-то я тормознул. smile

Автор: Vladimir13 16.12.2004, 23:15
мой способ рботает. можно пользоваться

Автор: z-END 19.12.2004, 12:47
Vladimir13 позвольте спросить в каком месте он работает? если уж говорить о том что он 100% работает, то и писать его тоже надо полностью...
1. где у вас инициализируются переменные path, filename?
2. этот кусок кода вообще не рабочий т.к. при первом проходе переменная NewFileName вообще не задана, соотвтственно такого файла нет!
Цитата
while FileExists(NewFileName) do
begin
NewFileName := path +Filename+p+format;
inc(i);

3. опять же по этому куску кода... Допустим (абстрактно) переменная NewFileName силами господа Бога, все же была инициализирована, и такой файл существует, то каким способом эта же переменная примет нужное значение??? i увеличится, но она же никак не влияет на название нового файла...

Так что скорее стирайте свою надпись о том что код рабочий... для самообразования советую посмотреть мой код, который должен работать!

Автор: Vladimir13 19.12.2004, 21:20
а догадаться, что переменные задать надо никак? Ведь если кому непонятно, напишут об этом. А для самообразования я использую Архангельского.

Автор: z-END 20.12.2004, 10:05
Vladimir13 да бог с ними с переменными, хотя тоже это не есть хорошо, т.к. для того чтобы сохранить файл надо задавать их каждый раз что неочень удобно, а что вы можете сказать по 2 и 3 пункту?!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)