![]() |
Zugriffsproblem bei Dateien (Lesezugriff)
Servus.
Also erstmal vorweg. Ich habe ein Programm geschrieben welches Textdateien auf einen bestimmten Text durchsucht und dann ausgibt. Funktioniert auch alles. Nur auf dem Rechner wo dieses Programm eingesetzt werden soll, hat eine andere Software (keine Selbstgeschriebene) den Zugriff auf diese Datei (Text Datei). In meinem Programm rufe ich die Datei mit
Delphi-Quellcode:
auf. Dann kommt die Fehlermeldung,
Stringlist.LoadFromFile(Pfad);
"Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird" Da ich aber zur gleichen Zeit mit dem TotalCommander die Datei öffnen kann, muss das doch irgendwie gehen? Hat einer eine Idee? Danke für Eure Mühe. |
Re: Zugriffsproblem bei Dateien (Lesezugriff)
Hallo,
ich denke das die Stringlist das Öffnen von Dateien exclusive macht und man daran auch nichts ändern kann (ich wüßte zumindest nicht wie). Alternativ kannst Du TFileStream verwenden, dort kannst Du die Modi übergeben wie die Datei geöffnet werden soll. [edit] Oder versuche einmal die Variable FileMode entsprechend zu setzen. Die Variable ist in der system.pas global definiert. [/edit]
Delphi-Quellcode:
FileMode := fmOpenRead;
Zitat:
Klaus |
Re: Zugriffsproblem bei Dateien (Lesezugriff)
Ok. Das hab ich mal probiert.
Also um den Fehler zu erzeugen rufe ich mit einer Applikation die Datei auf. Und zwar so ...
Delphi-Quellcode:
Unit Unit4;
Interface Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; Type TForm1 = class(TForm) Procedure FormCreate(Sender: TObject); Procedure FormDestroy(Sender: TObject); Private FH: THandle; End; Var Form1: TForm1; Implementation {$R *.dfm} Procedure TForm1.FormCreate(Sender: TObject); Begin FH := CreateFile(PChar(ExtractFilePath(ParamStr(0)) + 'Project3.txt'), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_ALWAYS, 0, 0); If FH = INVALID_HANDLE_VALUE Then Raise Exception.Create('Can''t open the file.'); SetFilePointer(FH, 4, nil, FILE_BEGIN); SetEndOfFile(FH); End; Und mit meiner anderen Applikation versuche ich dann das hier:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var sl: TStringList; Pfad: String; Stream : TFileStream; begin Pfad := 'c:\Dokumente und Einstellungen\bottd\Desktop\Datei bereits verwendet\Datei bereits verwendet\Project3.txt'; if FileExists(Pfad) then begin //sl:= TStringList.Create; try //sl.LoadFromFile(Pfad); Stream := TFileStream.Create(Pfad,fmOpenRead); ShowMessage('Öffnen hat geklappt'); finally end; end; end; Die Fehlermeldung kommt aber immernoch. Also, es hat sich somit nichts geändert. Woran liegt das? |
Re: Zugriffsproblem bei Dateien (Lesezugriff)
Hast Du es schon einmal mit fmShareDenyNone
probiert? Grüße Klaus |
Re: Zugriffsproblem bei Dateien (Lesezugriff)
Super!!! Damit klappt es.
Aber was genau ist jetzt der Unterschied zwischen fmShareDenyNone und fmOpenRead ? |
Re: Zugriffsproblem bei Dateien (Lesezugriff)
fmOpenRead Open -> for read access only.
fmShareDenyNone -> Allows full access for others. Grüße Klaus |
Re: Zugriffsproblem bei Dateien (Lesezugriff)
Achsoo. Wie bekomme ich denn nun aber den Inhalt der Datei in meine StrinList?
Die StringList muss genauso aussehen wie mit LoadFromFile. Oder geht das nicht? |
Re: Zugriffsproblem bei Dateien (Lesezugriff)
Nun, ich hatte meinen ersten Beitrag editiert.
Dann kannst Du mal versuchen mit der Stringlist zu arbeiten und vorher die Variabla FileMode := fmShareDenyNone setzen. FileMode ist in der system.pas global definiert, du brauchst diese Variable also nicht in Deinem Quellcode declarieren. Grüße Klaus |
Re: Zugriffsproblem bei Dateien (Lesezugriff)
Puhhh, also irgendwie verstehe ich nur Bahnhof.
Kannst du mir mal ein Beispiel geben? Ich verstehe jetzt nicht den Zusammenhang zwischen TFileStream und TStringList. |
Re: Zugriffsproblem bei Dateien (Lesezugriff)
Hi,
z.B. so
Delphi-Quellcode:
oder so:
sl:= TStringList.Create;
try FileMode := fmShareDenyNone; sl.LoadFromFile(Dateiname); finally end;
Delphi-Quellcode:
sl:= TStringList.Create;
try Stream := TFileStream.Create(Pfad,fmOpenRead); sl.LoadFromStream(Stream); finally end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 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