Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Вниз

Файл лога   Найти похожие ветки 

 
Dot   (2004-09-23 22:37) [0]

Люди как на API создать текстовый файл и написать что нибудь туда + как туда же добавить дату и время. то есть весть лог файл


 
Cobalt ©   (2004-09-23 23:09) [1]

Не фонтан, конечно, но - что есть:
unit FileLog;

interface
uses Dialogs, SysUtils, Windows;

type
   TFileLog = Class (TObject)
   Private
    FFileName: String;
    FHandle: THandle;
    FLogging: Boolean;
   Public
    Constructor Create;
    Destructor Destroy; reintroduce;
    Function BeginLogging(AFileName: String; Append: boolean): Boolean;
    Procedure StopLogging;
    Function WriteString(Str: String):Boolean;
    Property FileName: String read FFileName;
    Property Handle: THandle read FHandle;
    Property IsLogging: Boolean read FLogging;
   end;

implementation

Constructor TFileLog.Create;
begin
 FFileName:="";
 FHandle:=INVALID_HANDLE_VALUE;
 FLogging:=False;
end;

Destructor TFileLog.Destroy;
begin
 if FLogging
 then StopLogging;
 inherited Destroy;
end;

Function TFileLog.BeginLogging(AFileName: String; Append: boolean): Boolean;
var
 attr:word;
begin
 if FLogging then StopLogging;
 FFileName:=AFileName;
 if Append
    then attr:=OPEN_ALWAYS
    else attr:=CREATE_ALWAYS;
 FHandle:=CreateFile(PChar(FFileName),GENERIC_WRITE,FILE_SHARE_READ,
         nil,attr,FILE_FLAG_WRITE_THROUGH,0);

 if FHandle=INVALID_HANDLE_VALUE
 then raise Exception.Create("Îøèáêà îòêðûòèÿ ôàéëà "+FFileName+","#13#10+SysErrorMessage(GetLastError));

 SetFilePointer(FHandle,0,nil,FILE_END);
 FLogging:=true;
 Result:=FLogging;
end;

Procedure TFileLog.StopLogging;
begin
 if not FLogging then exit;
 if not CloseHandle(FHandle)
 then if GetLastError<>0
      then raise Exception.Create("&#206;&#248;&#232;&#225;&#234;&#224; &#231;&#224;&#234;&#240;&#251;&#242;&#232;&#255; &#244;&#224;&#233;&#235;&#224; "+FFileName+","#13#10+ SysErrorMessage(GetLastError));
 FHandle:=INVALID_HANDLE_VALUE;
 FLogging:=False;
end;

Function TFileLog.WriteString(Str: String):boolean;
var
  Written, need : Cardinal;
begin
 Result:=False;
 if not FLogging then Exit;
 Str:=Str+#13#10
 need:=Length(Str);
 if not WriteFile(FHandle,Str[1],need,Written,nil)
 then raise Exception.Create("&#206;&#248;&#232;&#225;&#234;&#224; &#231;&#224;&#239;&#232;&#241;&#232; &#226; &#244;&#224;&#233;&#235; "+FFileName+","#13#10
            +Format("&#210;&#240;&#229;&#225;&#243;&#229;&#242;&#241;&#255; &#231;&#224;&#239;&#232;&#241;&#224;&#242;&#252; %d &#225;&#224;&#233;&#242;, &#231;&#224;&#239;&#232;&#241;&#224;&#237;&#238; %d &#225;&#224;&#233;&#242;",[need,Written])
            +","#13#10+ysErrorMessage(GetLastError));
 Result:=(Written=need);
end;

end.


 
Cobalt ©   (2004-09-23 23:10) [2]

Йоханыый... Забылся :(
Вот, исправляюсь:
unit FileLog;

interface
uses Dialogs, SysUtils, Windows;

type
   TFileLog = Class (TObject)
   Private
    FFileName: String;
    FHandle: THandle;
    FLogging: Boolean;
   Public
    Constructor Create;
    Destructor Destroy; reintroduce;
    Function BeginLogging(AFileName: String; Append: boolean): Boolean;
    Procedure StopLogging;
    Function WriteString(Str: String):Boolean;
    Property FileName: String read FFileName;
    Property Handle: THandle read FHandle;
    Property IsLogging: Boolean read FLogging;
   end;

implementation

Constructor TFileLog.Create;
begin
 FFileName:="";
 FHandle:=INVALID_HANDLE_VALUE;
 FLogging:=False;
end;

Destructor TFileLog.Destroy;
begin
 if FLogging
 then StopLogging;
 inherited Destroy;
end;

Function TFileLog.BeginLogging(AFileName: String; Append: boolean): Boolean;
var
 attr:word;
begin
 if FLogging then StopLogging;
 FFileName:=AFileName;
 if Append
    then attr:=OPEN_ALWAYS
    else attr:=CREATE_ALWAYS;
 FHandle:=CreateFile(PChar(FFileName),GENERIC_WRITE,FILE_SHARE_READ,
         nil,attr,FILE_FLAG_WRITE_THROUGH,0);

 if FHandle=INVALID_HANDLE_VALUE
 then raise Exception.Create("Ошибка открытия файла "+FFileName+","#13#10+SysErrorMessage(GetLastError));

 SetFilePointer(FHandle,0,nil,FILE_END);
 FLogging:=true;
 Result:=FLogging;
end;

Procedure TFileLog.StopLogging;
begin
 if not FLogging then exit;
 if not CloseHandle(FHandle)
 then if GetLastError<>0
      then raise Exception.Create("Ошибка закрытия файла "+FFileName+","#13#10+ SysErrorMessage(GetLastError));
 FHandle:=INVALID_HANDLE_VALUE;
 FLogging:=False;
end;

Function TFileLog.WriteString(Str: String):boolean;
var
  Written, need : Cardinal;
begin
 Result:=False;
 if not FLogging then Exit;
 Str:=Str+#13#10
 need:=Length(Str);
 if not WriteFile(FHandle,Str[1],need,Written,nil)
 then raise Exception.Create("Ошибка записи в файл "+FFileName+","#13#10
            +Format("Требуется записать %d байт, записано %d байт",[need,Written])
            +","#13#10+ysErrorMessage(GetLastError));
 Result:=(Written=need);
end;

end.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.038 c
4-1096300901
LicProd
2004-09-27 20:01
2004.10.31
Определить Хэндл приложения на ToolBarWindow32 ?


14-1097662003
Rentgen
2004-10-13 14:06
2004.10.31
Неужели накрылась видяха?


14-1097172164
Abzz
2004-10-07 22:02
2004.10.31
Сколько стоит?


14-1097181673
GuAV
2004-10-08 00:41
2004.10.31
система комманд КР580


3-1096542219
Брат
2004-09-30 15:03
2004.10.31
Показ Memo-поля в DBGrid





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский