AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Auf Dateien zugreifen die gerade in Gebracuh sind (?)
Thema durchsuchen
Ansicht
Themen-Optionen

Auf Dateien zugreifen die gerade in Gebracuh sind (?)

Ein Thema von buster55 · begonnen am 26. Aug 2008 · letzter Beitrag vom 14. Nov 2008
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
buster55

Registriert seit: 25. Nov 2007
88 Beiträge
 
#1

Auf Dateien zugreifen die gerade in Gebracuh sind (?)

  Alt 26. Aug 2008, 17:36
Hallo Delphi-''Piraxikanten''
Meine Frage ist eigentlich ganz einfach, ich möchte mit einem Delphi Programm auf Dateien zugreifen die gerade von anderen Programmen in Benutzung sind.
Windows selbst kann das ja nicht, wenn man eine Datei die gerade beuntzt wird, ausführen oder kopieren will kommt ein Fehler.
In meinem Fall möchte ich die Datei kopieren (wie das mit normalen Dateien geht ist mit natürlich klar).
Unmöglich ist das nicht, es gibt ein Programm (ist bestimmt nicht das einzige) das solche Dateien kopieren, löschen, etc. kann, es nennt dich ''Unlocker'' (siehe: http://www.chip.de/downloads/Unlocker_18414122.html)

Nun meine Frage sollte klar sein

Probiert hab ich schon alles mögliche (Normale Artundweise, Datei in einen Stream laden, etc.)

Hab echte keine Ideen mehr


Grüße
buster
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Auf Dateien zugreifen die gerade in Gebracuh sind (?)

  Alt 26. Aug 2008, 17:51
Ich vermute mal, dass Unlocker dem anderen Programm das Handle unter den Füßen wegzieht. Es gibt keine gute Möglichkeit, dein Problem zu lösen, jedoch eine Reihe von schlechten (folgende Liste ist ohne Anspruch auf Vollständigkeit):
1. CreateFile hooken und FILE_SHARE_READ zum dritten Parameter hinzu-or-en. Du solltest jedoch bedenken, dass sich der Programmierer des "Feind"-Programms etwas dabei gedacht haben könnte, als er dieses Flag nicht gesetzt hat.
2. Einen Thread in das andere Programm injizieren, und von dort aus mit dem entsprechenden Handle lesen. Das funktioniert jedoch nur, wenn im anderen Programm bei CreateFile auch Lesezugriff und nicht nur Schreibzugriff beantragt wurde. Richtig hässlich wird es, wenn die Datei nicht overlapped geöffnet wurde. Dann musst du nämlich manuell den Dateizeiger versetzen. Dabei gibt es dann eine Race Condition.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#3

Re: Auf Dateien zugreifen die gerade in Gebracuh sind (?)

  Alt 26. Aug 2008, 18:03
Moin, Moin.
Und wie wäre es, am Dateisystem vorbei, direkt auf die Sektoren der Festplatte zuzugreifen? Das müsste doch möglich sein. Ich meine mich erinnern zu könne das vor langer Zeit, als alles noch viel einfacher war, mal unter TurboPascal gemacht zu haben. Würde aber wohl bedeuten, mit Assembler zu arbeiten, oder?
Ralph
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Auf Dateien zugreifen die gerade in Gebracuh sind (?)

  Alt 26. Aug 2008, 18:09
Assembler bräuchtest du dafür nicht. Windows stellt eigentlich für alles entsprechende Funktionen bereit, damit Treiber-Programmierer nicht CPU-abhängig programmieren müssen. Allerdings sind diese speziellen Funktionen im Usermode tabu.
Dennoch hast du Recht. Man kann mit den ganz normalen Dateifunktionen direkt auf das physikalische Laufwerk zugreifen. Dass man dafür Administrator-Rechte benötigt, sollte klar sein. Das größere Problem dürfte allerdings sein, sich auf der Festplatte zurechtzufinden.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Auf Dateien zugreifen die gerade in Gebracuh sind (?)

  Alt 26. Aug 2008, 18:11
Man kann auch ohne Assembler mit entsprechenden Rechten direkt vom Datenräger lesen. Allerdings muss man dann wissen wie das Dateisystem aufgebaut ist und die Dateien sind auch nicht grundlos gesperrt. Angenommen Programmx will 100 Byte in eine Datei schreiben und gerade als es 50 Byte davon geschrieben hat, kopiere ich die Datei. Resultat ist Datenmüll weil ich weder die Ursprüngliche Version der Datei habe noch die neue sondern eine Mischung aus beiden.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#6

Re: Auf Dateien zugreifen die gerade in Gebracuh sind (?)

  Alt 26. Aug 2008, 18:17
Interessant.
Aber wie du schon sagst, selbst wenn Windows entsprechende Funktionen bereitstellt: Das Zurechtfinden stelle ich mir sehr aufwendig vor. Kenne mich heute nicht mehr aus, so einfach wie damals mit den FAT's ist es sicherlich nicht mehr. Man müsste doch sicherlich auch selbst auf die verschiedenen möglichen Dateisysteme reagieren, das kann Windows dem Programmierer doch nicht abnehmen?!

// roter Kasten: Ja, das ist natürlich ein absolut überzeugender Hinweis.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Auf Dateien zugreifen die gerade in Gebrauch sind (?)

  Alt 26. Aug 2008, 18:19
Windows nimmt dem Programmierer das ja ab in dem es Funktionen wie OpenFile etc. bereit stellt. Aber eben diese will man ja nicht verwenden weil diese eine Sperrung der Dateien berücksichtigen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#8

Re: Auf Dateien zugreifen die gerade in Gebracuh sind (?)

  Alt 26. Aug 2008, 18:25
That's what I mean!
Ich muss Funktionen verwenden, die direkt auf Sektor xy etc, zugreifen. Die Interpretation der gelesenen Daten ist vom Dateisystem abhängig. Die Informationen muss der Programmierer dann ohne Windows-Hilfe analysieren und verwenden. Oder habe ich Apollonius jetzt falsch verstanden?
Ralph
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Auf Dateien zugreifen die gerade in Gebracuh sind (?)

  Alt 26. Aug 2008, 18:29
Mich hast du richtig verstanden. Die Frage ist, ob ich das PSDK richtig verstanden habe.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#10

Re: Auf Dateien zugreifen die gerade in Gebracuh sind (?)

  Alt 26. Aug 2008, 18:32
Nun gut - dann warten wir mal ab, welchen Schluß der TE aus der Diskussion zieht
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 04:48 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