AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Zugriffsproblem bei Dateien (Lesezugriff)
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffsproblem bei Dateien (Lesezugriff)

Ein Thema von DoktorD · begonnen am 7. Sep 2007 · letzter Beitrag vom 7. Sep 2007
Antwort Antwort
DoktorD

Registriert seit: 13. Dez 2005
153 Beiträge
 
#1

Zugriffsproblem bei Dateien (Lesezugriff)

  Alt 7. Sep 2007, 11:26
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

Stringlist.LoadFromFile(Pfad); auf. Dann kommt die Fehlermeldung,

"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.
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Zugriffsproblem bei Dateien (Lesezugriff)

  Alt 7. Sep 2007, 11:41
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]
FileMode := fmOpenRead;
Zitat von DelphiHilfe:
Category

file management routines

const

fmOpenRead = $0000;
fmOpenWrite = $0001;
fmOpenReadWrite = $0002;

fmShareCompat = $0000;
fmShareExclusive = $0010;
fmShareDenyWrite = $0020;
fmShareDenyRead = $0030;
fmShareDenyNone = $0040;

Description

The file open mode constants are used when a file or stream is opened to control how it can be shared.

The TFileStream constructor has a Mode parameter that you can set to one of these constants:
Constant Definition

fmCreate If the file exists, open for write access, otherwise, create a new file. Unlike the other constants, which are declared in the SysUtils unit, this constant is declared in classes.pas.
fmOpenRead Open for read access only.
fmOpenWrite Open for write access only.
fmOpenReadWrite Open for read and write access.
fmShareCompat Compatible with the way FCBs are opened.
fmShareExclusive Read and write access is denied.
fmShareDenyWrite Write access is denied.

fmShareDenyRead Read access is denied.
fmShareDenyNone Allows full access for others.
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
DoktorD

Registriert seit: 13. Dez 2005
153 Beiträge
 
#3

Re: Zugriffsproblem bei Dateien (Lesezugriff)

  Alt 7. Sep 2007, 11:52
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?
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Zugriffsproblem bei Dateien (Lesezugriff)

  Alt 7. Sep 2007, 12:02
Hast Du es schon einmal mit fmShareDenyNone
probiert?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
DoktorD

Registriert seit: 13. Dez 2005
153 Beiträge
 
#5

Re: Zugriffsproblem bei Dateien (Lesezugriff)

  Alt 7. Sep 2007, 12:05
Super!!! Damit klappt es.

Aber was genau ist jetzt der Unterschied zwischen fmShareDenyNone und fmOpenRead ?
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Zugriffsproblem bei Dateien (Lesezugriff)

  Alt 7. Sep 2007, 12:06
fmOpenRead Open -> for read access only.
fmShareDenyNone -> Allows full access for others.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
DoktorD

Registriert seit: 13. Dez 2005
153 Beiträge
 
#7

Re: Zugriffsproblem bei Dateien (Lesezugriff)

  Alt 7. Sep 2007, 12:07
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?
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Zugriffsproblem bei Dateien (Lesezugriff)

  Alt 7. Sep 2007, 12:09
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
Klaus
  Mit Zitat antworten Zitat
DoktorD

Registriert seit: 13. Dez 2005
153 Beiträge
 
#9

Re: Zugriffsproblem bei Dateien (Lesezugriff)

  Alt 7. Sep 2007, 12:17
Puhhh, also irgendwie verstehe ich nur Bahnhof.

Kannst du mir mal ein Beispiel geben?
Ich verstehe jetzt nicht den Zusammenhang zwischen TFileStream und TStringList.
  Mit Zitat antworten Zitat
C.Schoch

Registriert seit: 2. Jan 2006
Ort: Wüstenrot
235 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Zugriffsproblem bei Dateien (Lesezugriff)

  Alt 7. Sep 2007, 12:27
Hi,
z.B. so
Delphi-Quellcode:
sl:= TStringList.Create;
try
  FileMode := fmShareDenyNone;
  sl.LoadFromFile(Dateiname);
finally

end;
oder so:
Delphi-Quellcode:
sl:= TStringList.Create;
try
  Stream := TFileStream.Create(Pfad,fmOpenRead);
  sl.LoadFromStream(Stream);
finally

end;
Tschau Christian
Das System hofft auf Besserung
[Siemens]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz