Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-14323
_alx_
2002-07-03 18:06
2002.09.05
Вопрос по EMF


14-14216
VictorT
2002-08-09 12:59
2002.09.05
Как из формы в html передать елемент массива в php?


14-14230
id_privin
2002-08-09 13:20
2002.09.05
Unwanted Reboot


3-13943
S@shka
2002-07-29 21:10
2002.09.05
Доступ к базе нескольких клиентов


14-14269
lipskiy
2002-08-11 02:34
2002.09.05
Ищу нормальный UnZip-компонент





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский