Page 1 of 1
Запись в файл
Posted: 31.01.2008 23:07
by Edred
Тема восстановлена из кеша гугла. Если автор сможет повторить свой пост (в новой теме) - я этот удалю.
Запись в файл
Edred
Moderator
Joined: 28 Mar 2006
Posts: 654
Location: Saint-Petersburg
Posted: Tue May 01, 2007 1:41 Post subject:
--------------------------------------------------------------------------------
Это полезная вещь, надо ее в инклюды.
Back to top
id
Neophyte
Joined: 24 Dec 2006
Posts: 46
Posted: Fri May 04, 2007 8:59 Post subject:
--------------------------------------------------------------------------------
Вроде Стелс TStringList поддерживает еще.
Тогда еще вариант:
Code:
var
ts: TStringList;
begin
ts:=TStringList.Create();
ts.Text := текст; //или ts.Add(текст) построчно
ts.SaveToFile('путь');
ts.Free;
end;
Back to top
id
Neophyte
Joined: 24 Dec 2006
Posts: 46
Posted: Fri May 04, 2007 9:01 Post subject:
--------------------------------------------------------------------------------
Вспомнил, что в своих некоторых скриптах делал эту возможность и взял оттуда процедуру.
Code:
procedure WriteLog(mes: string);
begin
if not WriteToLog then exit;
with TStringList.Create do
begin
try
LoadFromFile(LogName);
Add(FormatDateTime('dd.mm.yyyy hh:mm:ss > ', Now) + mes);
SaveToFile(LogName);
finally
Free;
end;
end;
end;
WriteToLog - бул.
LogName - стринг.
Из конфига.
Re: Запись в файл
Posted: 04.07.2011 16:39
by Vizit0r
xmind wrote:
Code: Select all
procedure WriteToFile(filepath: string; data: string);
...
изменил на
перезаписать содержимое файла
Code: Select all
procedure WriteToFile(filepath: string; data: string);
var mode: Word;
begin
if FileExists(filepath) then mode := fmOpenReadWrite
else mode := fmCreate;
with TFileStream.Create(filepath,mode) do
try
WriteBuffer(data,Length(data)*2);
finally
Free;
end;
end;
добавить строку в файл
Code: Select all
procedure WriteToFile(filepath: string; data: string);
var mode: Word;
begin
if FileExists(filepath) then mode := fmOpenReadWrite
else mode := fmCreate;
with TFileStream.Create(filepath,mode) do
try
Seek(0,soFromEnd);
WriteBuffer(data,Length(data)*2);
finally
Free;
end;
end;
да, можно было это сделать параметром, но я решил не усложнять
xmind wrote:пример:
WriteToFile('C:\log.txt', 'hello world' + #13#10);
#13#10 - перевод строки
Re: Запись в файл
Posted: 13.08.2011 0:39
by innominee
Есть вопрос. Юзаю инклюд Визитора, строка кода
Code: Select all
WriteToFile('E:\S\log.txt', 'Started ' +DateTimeToStr(Now));
Если дописываю перевод строки после SateTime.., то функция ругается на неверное число параметров. Но даже просто с символом перевода - в файл не дописываются строки, а просто заменяются. Т.е. в файле всегда одна строка =( Т.е. хочу узнать следующее : как использовать вставку времени\ника чара + символ перевода строки, и как сделать, что бы функция дописывала в файл, а не заменяла все в нем? Заранее спасибо за ответ
Re: Запись в файл
Posted: 13.08.2011 0:49
by Vizit0r
копай в сторону Seek(0, soFromEnd);
Re: Запись в файл
Posted: 13.08.2011 1:11
by innominee
Vizit0r wrote:копай в сторону Seek(0, soFromEnd);
Спасибо, помогла вставка строки перед WriteBuffer(data,Length(data));.
Re: Запись в файл
Posted: 13.08.2011 9:37
by Vizit0r
изменил свой пост с функциями
Re: Запись в файл
Posted: 22.11.2013 1:43
by Хреник
пример с добавлением строки в файл, вешает новый стелс 6.1.4 наглухо.
А точнее "Seek(0,soFromEnd);"
Re: Запись в файл
Posted: 22.11.2013 4:38
by Vizit0r
1) Seek исправил, в апдейте будет работать.
2)изменил пример, потому что символы в строке теперь имеют по 2 байта - умножать длину надо на 2.
Re: Запись в файл
Posted: 06.01.2016 20:51
by GeeZeR
Подскажите, как добавить символ разрыва строки в WriteBuffer(data,Length(data)*2); чтобы каждая запись в примере начиналась с новой строки:
Code: Select all
procedure WriteToFile(path: string; data: string);
var mode: Word;
begin
if FileExists(path) then begin
mode := fmOpenReadWrite;
end else begin
mode := fmCreate;
end;
with TFileStream.Create(path,mode) do try
Seek(0,soFromEnd);
WriteBuffer(data,Length(data)*2);
finally
Free;
end;
end;
Re: Запись в файл
Posted: 06.01.2016 21:31
by Vizit0r
tempstr : String;
tempstr := data + #13 + #10;
Re: Запись в файл
Posted: 07.01.2016 15:33
by GeeZeR
Не хочет так.
Code: Select all
procedure WriteToFile(path: string; data: string);
var mode: Word;
begin
if FileExists(path) then begin
mode := fmOpenReadWrite;
end else begin
mode := fmCreate;
end;
with TFileStream.Create(path,mode) do try
Seek(0,soFromEnd);
WriteBuffer(data + #13 + #10, Length(data)*2);
finally
Free;
end;
end;
Writeln(data); чёт тоже не пашет.
Re: Запись в файл
Posted: 07.01.2016 23:27
by Vizit0r
ты читал что я писал? Я не писал про "data + #13 + #10". Наверное неспроста я написал про новую переменную, да?
Причем, Length(data)*2 должно быть (Length(data)+2)*2.
Re: Запись в файл
Posted: 08.01.2016 13:38
by GeeZeR
Vizit0r wrote:ты читал что я писал? Я не писал про "data + #13 + #10". Наверное неспроста я написал про новую переменную, да?
Причем, Length(data)*2 должно быть (Length(data)+2)*2.
Растолкуй мне какая разница между:
Code: Select all
WriteBuffer(data + #13 + #10, Length(data)*2);
и
Code: Select all
tempstr := data + #13 + #10;
WriteBuffer(tempstr, Length(data)*2);
?
(Length(data)+2)*2
А про это ты написать забыл, да?
Но оно всё равно не пашет, что я делаю не так?
Code: Select all
procedure WriteToFile(path: string; data: string);
var mode: Word;
tempstr : string;
begin
if FileExists(path) then begin
mode := fmOpenReadWrite;
end else begin
mode := fmCreate;
end;
with TFileStream.Create(path,mode) do try
tempstr := data + #13 + #10;
Seek(0, soFromEnd);
WriteBuffer(tempstr, (Length(data)*2)*2);
finally
Free;
end;
end;
WriteToFile(<путь>, 'test string');
Re: Запись в файл
Posted: 08.01.2016 14:20
by Vizit0r
НУ ПЛЮС ЖЕ!
(Length(data)+2)
Code: Select all
Program prodaza_runok;
procedure WriteToFile(path: string; data: string);
var mode: Word;
tempstr : string;
begin
if FileExists(path) then begin
mode := fmOpenReadWrite;
end else begin
mode := fmCreate;
end;
with TFileStream.Create(path,mode) do
try
tempstr := data + #13#10;
Seek(0, soFromEnd);
WriteBuffer(tempstr,(Length(data)+2)*2);
finally
Free;
end;
end;
begin
WriteToFile('d:\Stealth\my\zzz.txt', 'test string');
end.
итог, в UTF-16
Code: Select all
test string
test string
test string
test string
test string
GeeZeR wrote:
Растолкуй мне какая разница между:
Code: Select all
WriteBuffer(data + #13 + #10, Length(data)*2);
и
Code: Select all
tempstr := data + #13 + #10;
WriteBuffer(tempstr, Length(data)*2);
?
WriteBuffer первым параметром принимает переменную неопр. типа. Переменную, а не значение. А data + #13 + #10 это как раз и есть значение.
Кстати - возможно, в результате преоразований скрипт-код это значение и влетает в WriteBuffer как переменная. Впрочем, это уже ньюансы.
Re: Запись в файл
Posted: 08.01.2016 14:59
by GeeZeR
Да, моя невнимательность, спасибо заработало!