Запись в файл
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 - стринг.
Из конфига.
Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
Запись в файл
Запись в файл
Тема восстановлена из кеша гугла. Если автор сможет повторить свой пост (в новой теме) - я этот удалю.
Re: Запись в файл
изменил на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: Запись в файл
Есть вопрос. Юзаю инклюд Визитора, строка кода
Если дописываю перевод строки после SateTime.., то функция ругается на неверное число параметров. Но даже просто с символом перевода - в файл не дописываются строки, а просто заменяются. Т.е. в файле всегда одна строка =( Т.е. хочу узнать следующее : как использовать вставку времени\ника чара + символ перевода строки, и как сделать, что бы функция дописывала в файл, а не заменяла все в нем? Заранее спасибо за ответ
Code: Select all
WriteToFile('E:\S\log.txt', 'Started ' +DateTimeToStr(Now));
Re: Запись в файл
копай в сторону Seek(0, soFromEnd);
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Запись в файл
Vizit0r wrote:копай в сторону Seek(0, soFromEnd);
Спасибо, помогла вставка строки перед WriteBuffer(data,Length(data));.
Re: Запись в файл
изменил свой пост с функциями
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Запись в файл
пример с добавлением строки в файл, вешает новый стелс 6.1.4 наглухо.
А точнее "Seek(0,soFromEnd);"
А точнее "Seek(0,soFromEnd);"
Re: Запись в файл
1) Seek исправил, в апдейте будет работать.
2)изменил пример, потому что символы в строке теперь имеют по 2 байта - умножать длину надо на 2.
2)изменил пример, потому что символы в строке теперь имеют по 2 байта - умножать длину надо на 2.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Запись в файл
Подскажите, как добавить символ разрыва строки в 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;
Stealth 8.10.2 | Клиент: 7.0.13.4
Re: Запись в файл
tempstr : String;
tempstr := data + #13 + #10;
tempstr := data + #13 + #10;
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Запись в файл
Не хочет так.
Writeln(data); чёт тоже не пашет.
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;
Stealth 8.10.2 | Клиент: 7.0.13.4
Re: Запись в файл
ты читал что я писал? Я не писал про "data + #13 + #10". Наверное неспроста я написал про новую переменную, да?
Причем, Length(data)*2 должно быть (Length(data)+2)*2.
Причем, Length(data)*2 должно быть (Length(data)+2)*2.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Запись в файл
Растолкуй мне какая разница между: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');
Stealth 8.10.2 | Клиент: 7.0.13.4
Re: Запись в файл
НУ ПЛЮС ЖЕ!
(Length(data)+2)
итог, в UTF-16
Кстати - возможно, в результате преоразований скрипт-код это значение и влетает в WriteBuffer как переменная. Впрочем, это уже ньюансы.
(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.
Code: Select all
test string
test string
test string
test string
test string
WriteBuffer первым параметром принимает переменную неопр. типа. Переменную, а не значение. А data + #13 + #10 это как раз и есть значение.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 как переменная. Впрочем, это уже ньюансы.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".