Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2012, 20:52   #1
cezer
Пользователь
 
Регистрация: 01.06.2012
Сообщений: 22
По умолчанию Дозапись в файл

Как сделать дозапись а не перезапись вот код:
Код:


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
i: Integer;
S: TStringList;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
S.Add('мама.'+IntToStr(i)+'.папа.я');
i := i + 1;
S.SaveToFile('filename.txt');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
S := TStringList.Create;
end;

end.

Последний раз редактировалось Stilet; 14.06.2012 в 21:49.
cezer вне форума Ответить с цитированием
Старый 14.06.2012, 20:59   #2
QunneD
C++ & PHP & Asm
Форумчанин
 
Аватар для QunneD
 
Регистрация: 06.12.2008
Сообщений: 300
По умолчанию

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

С WinAPI функциями проще, SetFilePointer с флагом FILE_END.

upd:

Код:
var
  S : TStrings;
begin
  S := TStringList.Create;
  try
  S.LoadFromFile('test.txt');
  S.Append('LOL');
  S.SaveToFile('test.txt');
  except
    on E: Exception do
    begin
      MessageBoxA(0, LPCSTR('Произошла ошибка'), LPCSTR('Ошибка'), MB_ICONERROR);
    end
  end;
  S.Free;
end;

Последний раз редактировалось QunneD; 14.06.2012 в 21:19.
QunneD вне форума Ответить с цитированием
Старый 14.06.2012, 21:00   #3
AlexMas
Пользователь
 
Аватар для AlexMas
 
Регистрация: 30.05.2012
Сообщений: 69
По умолчанию

var
F: TextFile;
begin
AssignFile(F,'c:\filename.txt');
Append(F);
Writeln(F, 'somthing');
CloseFile(f);
end;
AlexMas вне форума Ответить с цитированием
Старый 14.06.2012, 21:18   #4
cezer
Пользователь
 
Регистрация: 01.06.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от AlexMas Посмотреть сообщение
var
F: TextFile;
begin
AssignFile(F,'c:\filename.txt');
Append(F);
Writeln(F, 'somthing');
CloseFile(f);
end;
не получается после переоткрытия программы начинает запись с 1 и так далее хотя запись остановилась на 7и. Вот Код

procedure TForm1.Button1Click(Sender: TObject);
var
f: Textfile; //çàäà¸ì ôàéëîâóþ ïåðåìåííóþ
s,e: string;


//çàäà¸ì ïåðåìåííóþ äëÿ õðàíåíèÿ ñòðîêè
begin
AssignFile(F,'D:\base.txt');
Append(F);
Writeln(F, IntToStr(Gi));
Gi:= Gi + 1;
closefile(f);

begin
e:=ipw1.LocalName;
s:=Edit1.Text;
assignfile(f, FileN);
append(f); //îòêðûâàåì ôàéë äëÿ çàïèñè
writeln(f,Label3.Caption+IntToStr(G i)+Label4.Caption+Label5.Caption+s+ Label5.Caption+e);
begin
ShowMessage('Çàïèñü Ñîçäàíà!!!');
closefile(f);
Edit1.text:=' ';
end;
Memo1.ScrollBars:=ssBoth;
Memo1.Lines.LoadFromFile(FileN);
Panel1.Caption:=Memo1.Lines[Memo1.Lines.Count-1];
end;
end;
end.
cezer вне форума Ответить с цитированием
Старый 14.06.2012, 21:33   #5
AlexMas
Пользователь
 
Аватар для AlexMas
 
Регистрация: 30.05.2012
Сообщений: 69
По умолчанию

Точнее надо формулировать =)
Я так понял, нужно продолжить счет?

т.е.
было:
0
1
2
3

нужно, чтобы после открытия и дозапись продолжалась с 4?
т.е.
добавить
5
6
7
???

Если да, то читать последний символ в файле, переводить в int, присваивать Gi это значение и продолжать по накатанной.
AlexMas вне форума Ответить с цитированием
Старый 14.06.2012, 21:39   #6
cezer
Пользователь
 
Регистрация: 01.06.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от AlexMas Посмотреть сообщение
Точнее надо формулировать =)
Я так понял, нужно продолжить счет?

т.е.
было:
0
1
2
3

нужно, чтобы после открытия и дозапись продолжалась с 4?
т.е.
добавить
5
6
7
???

Если да, то читать последний символ в файле, переводить в int, присваивать Gi это значение и продолжать по накатанной.
Да Алекс ты правильно понял только то что ты написал я пробовал у меня не получилось ошибки выдаёт(
cezer вне форума Ответить с цитированием
Старый 14.06.2012, 21:46   #7
AlexMas
Пользователь
 
Аватар для AlexMas
 
Регистрация: 30.05.2012
Сообщений: 69
По умолчанию

Строка произвольная? Или только цифры? или только буквы и одна цифра\число?
просто, если просто продолжить счет, то ничего сложного, а если выхватывать число из строки, то парсер надобен )

upd: Делфи ставится(лет 5 не писал на нем=) ), как закончится, накидаю примерчик

Последний раз редактировалось AlexMas; 14.06.2012 в 21:55.
AlexMas вне форума Ответить с цитированием
Старый 14.06.2012, 22:04   #8
QunneD
C++ & PHP & Asm
Форумчанин
 
Аватар для QunneD
 
Регистрация: 06.12.2008
Сообщений: 300
По умолчанию

Код:
var
  S : TStrings;
begin
  S := TStringList.Create;
  try
  S.LoadFromFile('test.txt');
  S.Append(IntToStr(StrToInt(S.Strings[S.Count-1])+1));
  S.SaveToFile('test.txt');
  except
    on E: Exception do
    begin
      MessageBoxA(0, LPCSTR('Произошла ошибка'), LPCSTR('Ошибка'), MB_ICONERROR);
    end
  end;
  S.Free;
end;
QunneD вне форума Ответить с цитированием
Старый 14.06.2012, 22:45   #9
AlexMas
Пользователь
 
Аватар для AlexMas
 
Регистрация: 30.05.2012
Сообщений: 69
По умолчанию

Вариант для военных ))
На форме две кнопки и мемо
По первой открытие\создание файла
по второй добавление +1 ))
Более длинно, но для понимания происходящих процессов более очевидно, наверное. =)

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  F: TextFile;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    Memo1.Lines.Clear;
    Memo1.Lines.LoadFromFile('c:\filename.txt');
  except
    AssignFile(F,'c:\filename.txt');
    Rewrite(f);
    Writeln(f, '0');
    CloseFile(f);
    Button1Click(Sender);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
lastInt: Integer;
li: string;
begin
  AssignFile(F,'c:\filename.txt');
  Reset(F);
  while not Eof(F) do
  begin
    ReadLn(F, li);
  end;
  try
    lastInt := StrToInt(li);
  Except
    lastInt := 0;
  end;
  lastInt := lastInt + 1;
  Append(F);
  Writeln(F, IntToStr(lastInt));
  CloseFile(f);
  Button1Click(Sender);
end;
end.

Последний раз редактировалось AlexMas; 14.06.2012 в 22:58.
AlexMas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дозапись в текстовый файл Lui C++ Builder 0 29.05.2012 16:46
Дозапись данных в файл DarkDeidara Помощь студентам 6 18.05.2011 10:23
Дозапись информации в файл. ROMA2PVT Помощь студентам 11 22.03.2010 12:29
Дозапись в WORD yurganov Общие вопросы Delphi 1 10.07.2009 10:41
дозапись в файл Djaconda Общие вопросы C/C++ 1 04.06.2008 23:52