![]() |
Re: Tail Funktionalität
Zitat:
Bei TFileStream kann man diese Rechte selber vergeben. |
Re: Tail Funktionalität
Zitat:
Aber warum können dann andere Anwendung das File öffnen? |
Re: Tail Funktionalität
OK, hab grad nochmal nachgesehn, FILE_SHARE_READ wird doch gesetzt, also lesend kann man zugreifen.
eventuell ist ja was mit dem fmShareDenyNone nicht in Ordnung :gruebel: OK, wenn man sich das (in D7) man ansieht, dann wird Rights einfach ignoriert, wenn man die Datei nicht selber ERSTELLT.
Delphi-Quellcode:
[edit]
constructor TFileStream.Create(const FileName: string; Mode: Word; Rights: Cardinal);
begin if Mode = fmCreate then begin inherited Create(FileCreate(FileName, Rights)); if FHandle < 0 then raise EFCreateError.CreateResFmt(@SFCreateErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]); end else begin inherited Create(FileOpen(FileName, Mode)); if FHandle < 0 then raise EFOpenError.CreateResFmt(@SFOpenErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]); end; end; *weitersuch* gut, in FileOpen wird es aus Mode extrahiert, also eigentlich sollte es da klappen :gruebel: fmCreate > Sharing in Rights angeben ansonsten > Sharing mit Mode or-Verknüpfen Wer ist nur auf diesen SCH*** gekommmen (OK, wenn man fmCreate ansieht, welches $FFFF ist, dann kann man damit nix verknüpfen, aber dennoch ... dann halt immer über Rights)
Delphi-Quellcode:
zum Glück nutze ich diesen Stream nie und gehe fast immer direkt über die WinAPU und hatte da noch keine Probleme :angel2:
function FileOpen(const FileName: string; Mode: LongWord): Integer;
{$IFDEF MSWINDOWS} const AccessMode: array[0..2] of LongWord = ( GENERIC_READ, GENERIC_WRITE, GENERIC_READ or GENERIC_WRITE); ShareMode: array[0..4] of LongWord = ( 0, 0, FILE_SHARE_READ, FILE_SHARE_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE); |
Re: Tail Funktionalität
Zitat:
In diesem Fall konnte ich sie mit S := TFileStream.Create('C:\test.txt', fmOpenRead or fmShareDenyNone); ohne Probleme auslesen. |
Re: Tail Funktionalität
.. dann könnte man eventuell noch
FileOpen: Zitat:
Zitat:
Grüße Klaus |
Re: Tail Funktionalität
Wenn ich das richtig verstanden habe dann wird aber FileOpen und FileReads doch eh von TFileStream aufgerufen oder?
|
Re: Tail Funktionalität
Hiermit habe ich eine Datei erstellt und blockiert:
Delphi-Quellcode:
Hiermit kann ich aus der Datei lesen:
procedure TForm1.Button2Click(Sender: TObject);
begin assignFile(f,ExtractFilePath(ParamStr(0))+'test.txt'); rewrite(f); while true do begin writeLn(f,'test test test test test test test test'); application.processMessages; end; end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var fileHandle : Cardinal; buff: array[0..10] of char; i: Integer; begin fileHandle := fileOpen(ExtractFilePath(ParamStr(0))+'test.txt',fmOpenRead or fmShareDenyNone); i:=fileRead(fileHandle,buff[0],length(buff)); closeFile(fileHandle); edit1.Text:=buff+' '+IntToStr(i); end; Grüße Klaus |
Re: Tail Funktionalität
Danke für deinen Test. Dein Beispiel funktioniert bei mir auch.
Aber eins verstehe ich nicht. Die "alte" Tail function (mit FileStream) funktioniert jetzt plötzlich auch :gruebel: Eigentlich hab ich ja nichts dran geändert.
Delphi-Quellcode:
Aber gut wenn es jetzt funktioniert bin ich froh. Danke an Alle :dp:
function Tail(FileName:string; Position:Integer):string;
var S: TStream; L: Integer; begin S := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone); try S.Seek(Position, soBeginning); L := S.Size-Position; SetLength(Result, L); S.Read(Result[1], L); finally S.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz