AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie feststellen, ob eine Datei gelesen werden kann?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie feststellen, ob eine Datei gelesen werden kann?

Ein Thema von PeterPanino · begonnen am 15. Apr 2016 · letzter Beitrag vom 19. Apr 2016
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#21

AW: Wie feststellen, ob eine Datei gelesen werden kann?

  Alt 17. Apr 2016, 17:27
Da wäre eine Routine recht praktisch, mit der man (direkt, also nicht durch Rückschlüsse) herausfinden kann, mit welchen Flags eine Datei geöffnet ist. Gibt's denn sowas?
Eventuell, aber wofür? Wenn du die Datei in einem Programm öffnen willst, wirst du ja schon sehr genau wissen, was due machen musst. (ALso ob der Bneutzer Öffnet oder speichert)

Und das einzige, was hier sinnvoll ist, ist die Aktion zu probieren. Und wenn es nicht ging, dann gab es wohl ein Problem und man kann eine Fehlermeldung anzeigen. Die Info, ob eine Datei schreibbar ist, ist ja in dem Moment schon veraltet (und damit nutzlos) in dem die sie bekommst. Stell dir eine Anwendung vor, die 10 Mal pro Sekunde eine Datei exklusiv zum schreiben öffnet, eine Zeile schreibt und wieder schließt. Doofes Programm, aber kann man machen. Und du versuchst, die gleiche Datei zu öffnen.
Wenn du dann sowas machst wie
Delphi-Quellcode:
if IsFileReadable(AHTMLFile) then
  ThisHTMLStr := TFile.ReadAllText(AHTMLFile)
else
  LogThisError;
Ist dein Programm instabil, weil es dennoch zu einer Exception kommen kann!
Denk' immer dran, dein Programm kann jederzeit unterbrochen werden. Und bevor du wieder drankommst können potenziell alle anderen Prozesse im System laufen.


Und dann bin ich gerade noch auf opportunistic locks gestoßen. EIn Programm kann damit eine Datei zum schreiben öffnen und wird benachrichtigt, wenn ein zweites Programm schreiben möchte um dann seinen Zugriff zu beenden.
Es könnte also sein, dass die Datei zwar in Verwendung ist, du aber den Schreibzugriff trotzdem bekommst, wenn du fragst

Geändert von jfheins (17. Apr 2016 um 18:09 Uhr)
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#22

AW: Wie feststellen, ob eine Datei gelesen werden kann?

  Alt 19. Apr 2016, 01:27
Da wäre eine Routine recht praktisch, mit der man (direkt, also nicht durch Rückschlüsse) herausfinden kann, mit welchen Flags eine Datei geöffnet ist. Gibt's denn sowas?
Eventuell, aber wofür? Wenn du die Datei in einem Programm öffnen willst, wirst du ja schon sehr genau wissen, was due machen musst. (ALso ob der Bneutzer Öffnet oder speichert)

Und das einzige, was hier sinnvoll ist, ist die Aktion zu probieren. Und wenn es nicht ging, dann gab es wohl ein Problem und man kann eine Fehlermeldung anzeigen. Die Info, ob eine Datei schreibbar ist, ist ja in dem Moment schon veraltet (und damit nutzlos) in dem die sie bekommst. Stell dir eine Anwendung vor, die 10 Mal pro Sekunde eine Datei exklusiv zum schreiben öffnet, eine Zeile schreibt und wieder schließt. Doofes Programm, aber kann man machen. Und du versuchst, die gleiche Datei zu öffnen.
Wenn du dann sowas machst wie
Delphi-Quellcode:
if IsFileReadable(AHTMLFile) then
  ThisHTMLStr := TFile.ReadAllText(AHTMLFile)
else
  LogThisError;
Ist dein Programm instabil, weil es dennoch zu einer Exception kommen kann!
Denk' immer dran, dein Programm kann jederzeit unterbrochen werden. Und bevor du wieder drankommst können potenziell alle anderen Prozesse im System laufen.


Und dann bin ich gerade noch auf opportunistic locks gestoßen. EIn Programm kann damit eine Datei zum schreiben öffnen und wird benachrichtigt, wenn ein zweites Programm schreiben möchte um dann seinen Zugriff zu beenden.
Es könnte also sein, dass die Datei zwar in Verwendung ist, du aber den Schreibzugriff trotzdem bekommst, wenn du fragst
Danke für die Informationen!
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#23

AW: Wie feststellen, ob eine Datei gelesen werden kann?

  Alt 19. Apr 2016, 01:30
Wie ich jetzt entdeckt habe, entsteht seltsamerweise kein Fehler, wenn eine .DOC-Datei (also NICHT .DOCX) gelesen wird, während sie in MS Word 2010 geöffnet ist.

Seltsam!
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#24

AW: Wie feststellen, ob eine Datei gelesen werden kann?

  Alt 19. Apr 2016, 06:36
Wirklich seltsam. Bei mir (Windows 8.1, Word 2010, lokaler Zugriff, also kein Netzwerk) kann ich keinen Unterschied zwischen .doc und .docx feststellen. Beide können gelesen, aber natürlich nicht beschrieben werden, wenn sie in Word geöffnet sind.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#25

AW: Wie feststellen, ob eine Datei gelesen werden kann?

  Alt 19. Apr 2016, 09:51
Das kommt auf die Art und Weise an mit der der Zugriff erfolgt. Das Auslesen einer .doc geht auch ohne share write, weil diese für die neue Word Version konvertiert und nicht direkt geöffnet wird.
Die .docx wird hingegen direkt geöffnet und kann daher nur mit share write Flag geöffnet werden.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#26

AW: Wie feststellen, ob eine Datei gelesen werden kann?

  Alt 19. Apr 2016, 10:49
Und dann bin ich gerade noch auf opportunistic locks gestoßen.
Habe hier nur Delphi 7 und da fehlt der ganze Kram aus der WinIoCtl.h. Wie ist es bei den neueren Delphi Versionen?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 14:31 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