Форум: "Основная";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
ВнизCreateFile и WriteFile? Найти похожие ветки
← →
Filat (2002-08-21 14:50) [0]Привет ALL! Возникла проблема с созданием файла и записью в него, как это сделать правильно?
Сейчас делаю так:
procedure TMain_kb.WriteLnLog(S:String);
var
fff : system.text;
fn: String;
begin
fn:=DirPrg+"\"+date_dir+"\"+date_dir+".log";
system.Assign(fff, fn);
{$i-}
system.Append(fff);
{$i+}
if ioresult<>0 then
begin
{$i-}
system.Rewrite(fff);
{$i+}
end;
if ioresult=0 then
begin
WriteLn(fff, DateTimeToStr(Now())+" "+s);
system.Close(fff);
end;
end;
но через раз появляется ошибка, о том что файл занят приложением.
Что неправильно в этом коде или как сделвть через CreateFile и WriteFile? + с возможностью дозаписывать в файл. Необходимо вести лог программы, чего она делает.
Заранее благодарен.
← →
Werewolfru (2002-08-21 16:03) [1]А кто же будет закрывать файл то? Closefile(fff);
Командой system.close(fff) ты только освободил память, занятую файлом, а файл надо закрыфвать отдельно.
А лог можно вести с помошью OpenFile в моде ReadWrite, при этом если файл не существует, то он создается, если же существует, то информация дописывается в конец.
← →
Zaxar (2002-08-21 16:55) [2]Процедуры*
AssignFile - связать
Reset - открыть
Rewrite - создать
//---
Write(f,var); - писать
Read(f,var); - читать
//---
CloseFile - закрыть (Это обязательно,иначе будет твоя проблема)
← →
Filat (2002-08-21 20:17) [3]Если поставить в код прощедуры CloseFile или system.CloseFile и т.д. то при обращении к ней вылазит Error I/O 103.
А так процедура работает, но не всегда освобождает файл, млин...
Может как-то можно через CreateFile и WriteFile?
← →
Filat (2002-08-23 16:16) [4]Неужели такой трудный вопрос?
Коллеги, подскажите пожалуйста.
Попутно появился второй вопрос, как вести параллельно такой же файл, только шифруя его, может через потоки, но как?
← →
Polevi (2002-08-23 18:10) [5]type
TLogFile=class
private
fMaxFileSize:Cardinal;
fHandle,fmHandle:THANDLE;
fBuffer:Pointer;
public
constructor Create(AFileName:string);
destructor Destroy;override;
procedure WriteText(AText:string);
end;
{ TLogFile }
constructor TLogFile.Create(AFileName: string);
var
fileSizeHigh:Cardinal;
begin
fMaxFileSize:=$100000; //1 mbyte
fHandle:=CreateFile(PChar("c:\test.txt"),GENERIC_READ or GENERIC_WRITE,
0,nil,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
SetFilePointer(fHandle,0,nil,FILE_END);
fmHandle:=CreateFileMapping(fHandle,nil,PAGE_READWRITE,0,fMaxFileSize,nil);
fBuffer:=MapViewOfFile(fmHandle,FILE_MAP_WRITE,0,0,0);
end;
destructor TLogFile.Destroy;
begin
UnmapViewOfFile(fBuffer);
CloseHandle(fmHandle);
SetEndOfFile(fHandle);
CloseHandle(fHandle);
inherited;
end;
procedure TLogFile.WriteText(AText: string);
var
fBytesWrite:Cardinal;
begin
AText:=AText+#13#10;
WriteFile(fHandle,PChar(AText)^,Length(AText),FBytesWrite,nil);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with TLogFile.Create("c:\test.txt") do
begin
WriteText("just a ");
WriteText("test");
Free;
end;
end;
← →
Polevi (2002-08-23 18:18) [6]PS
обработку ошибок сам добавь
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c