Из FAQ`а по Quake (CTF).
Q: Я только что законнектился на CTF-сервер. Как узнать - голубой я или красный?
А: Если Вашу команду выеб%т - голубой, а если замочат - красный.
procedure AddStrToFile(S:string;const FileName:string;doNextLine:boolean);
{Добавление строки к файлу doNextLine - перевод строки}const
CR=#13#10;
var
f:TFileStream;
beginif FileExists(FileName)
then f:=TFileStream.Create(FileName,fmOpenWrite+fmShareDenyNone)
else f:=TFileStream.Create(FileName,fmCreate);
f.Position:=f.Size;
if doNextLine and (f.Size> 0)
then f.Write(CR,2);
f.Write(pointer(s)^,length(s));
f.Destroy;
end;
Here's the translation of the text into Russian:
Процедура AddStrToFile, которая добавляет строку в конец файла и opcional'no appends newline- символ. Вот разбивка кода:
FileName: имя файла, к которому будет добавлена строка
doNextLine: булевое значение, указывающее, нужно ли appends newline- символ после строки
Константы
const
CR = #13#10;
Константа CR установлена в символ возврата каретки и символа конца строки (#13#10), используемые для представления newline- символа в системах DOS/Windows.
Переменные
var
f: TFileStream;
Переменная f объявлена как объект TFileStream, который будет использоваться для чтения и записи файла.
Код
начало
если FileExists(FileName)
то f := TFileStream.Create(FileName, fmOpenWrite + fmShareDenyNone)
else f := TFileStream.Create(FileName, fmCreate);
Код проверяет, существует ли файл с помощью FileExists. Если он есть, то открывает файл в режиме записи с запретом на доступ для других (fmOpenWrite + fmShareDenyNone). Если файла не существует, то создает новый файл.
f.Position := f.Size;
Код устанавливает позицию файла в конец файла с помощью f.Position.
если doNextLine и (f.Size > 0)
то f.Write(CR, 2);
Если параметр doNextLine имеет значение True и файл не пуст (f.Size > 0), то записывает символ newline- в файл.
f.Write(Pointer(S)^, Length(S));
Код записывает строку S в файл с помощью f.Write. Выражение Pointer(S)^ конвертирует указатель на строку в адрес памяти, который может быть записан в файл. Функция Length(S) возвращает длину строки.
f.Destroy;
конец.
Наконец, код уничтожает объект TFileStream с помощью f.Destroy.
Альтернативное решение
Вместо использования TFileStream можно использовать более современный и эффективный подход с использованием единицы System. IOUtils и функции WriteFile:
uses System.IOUtils;
процедура AddStrToFile(S: string; const FileName: string; doNextLine: boolean);
var
Stream: TStream;
начало
Stream := TStringStream.Create('');
если doNextLine то
Stream.Write(#13#10, 2);
Stream.WriteString(S);
WriteFile(FileName, Stream.Data, Length(Stream.Data));
Stream.Free;
конец.
Код использует объект TStringStream для создания потока, который может быть записан и прочитан. Он добавляет символ newline- и строку в поток, а затем записывает содержимое потока в файл с помощью WriteFile. Наконец, он уничтожает поток. Этот подход более компактен и эффективен, чем оригинальный код.
Добавление строки к файлу: процедура AddStrToFile добавляет строку с возможным переводом на новую строку в указанный файл.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.