Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Herausfinden ob Festplatte/Wechselmedium schreibgeschutz hat (https://www.delphipraxis.net/102745-herausfinden-ob-festplatte-wechselmedium-schreibgeschutz-hat.html)

Metal_Snake2 3. Nov 2007 19:20


Herausfinden ob Festplatte/Wechselmedium schreibgeschutz hat
 
hi,

wie kann ich herausfinden ob eine Festplatte bzw. Wechselmedium(USB Stick) ein schreibschutz hat.
Wenn ich z.B. eine Datei auf einem USB Stick schreibe welches Schreibgeschützt ist erhalte ich eine fehlermeldung.

kann mir bitte jemand weiterhelfen?

danke im voraus.

Muetze1 3. Nov 2007 19:40

Re: Herausfinden ob Festplatte/Wechselmedium schreibgeschutz
 
Was willst du denn alles abprüfen?

- ob der Datenträger schreibgeschützt ist
- ob die Datei schreibgeschützt ist
- ob der Pfad durch die Rechtevergabe nicht beschreibbar ist
- ob durch das Parent-Directory vererbte Rechte dir das Schreibrecht verweigern
- ob der Account unter dem du läufst dies alles nicht darf
- wenn es mal eine Netzwerkfreigabe ist: ob die Freigabe dir das Schreiben erlaubt
- - "" -: ob es das Dateisystem hinter der Freigabe dir das Schreiben erlaubt
- ob eine Gruppenrichtlinie dir das Schreiben verbietet...

Da kommst du von eins ins Tausende. Deshalb: Versuche zu schreiben und wenn nicht, dann fang den Fehler ab und behandle ihn entsprechend und gebe dem Nutzer eine Meldung aus.

ErazerZ 3. Nov 2007 19:50

Re: Herausfinden ob Festplatte/Wechselmedium schreibgeschutz
 
z.B.:
Delphi-Quellcode:
const
  sDevice  = 'C:\';
  sFileName = sDevice + 'tmp_EZ_%d.txt';
var
  hFile: THandle;
  sTempFileName: string;
begin
  Randomize;
  sTempFileName := Format(sFilename, [Random(High(Integer))]);
  hFile := CreateFile(PAnsiChar(sTempFileName), GENERIC_WRITE, FILE_SHARE_WRITE, nil, OPEN_ALWAYS, 0, 0);
  if (hFile <> INVALID_HANDLE_VALUE) then
  begin
    ShowMessage('Habe schreibrechte..' + sTempFileName);
    CloseHandle(hFile);
    DeleteFile(sTempFileName);
  end else
    ShowMessage('Keine schreibrechte ' + sTempFileName);
.. es geht aber auch einfacher

hathor 3. Nov 2007 21:23

Re: Herausfinden ob Festplatte/Wechselmedium schreibgeschutz
 
GetDiskFreeSpaceEx ist 0, wenn man das Medium nicht beschreiben kann.

Muetze1 3. Nov 2007 21:24

Re: Herausfinden ob Festplatte/Wechselmedium schreibgeschutz
 
Zitat:

Zitat von hathor
GetDiskFreeSpaceEx ist 0, wenn man das Medium nicht beschreiben kann.

Funktioniert afaik aber nicht auf Netzwerklaufwerken.

hathor 3. Nov 2007 21:36

Re: Herausfinden ob Festplatte/Wechselmedium schreibgeschutz
 
Zitat:

Zitat von Muetze1
Funktioniert afaik aber nicht auf Netzwerklaufwerken.

Bei mir geht's damit:

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var FreeAvailable, TotalSpace, TotalFree: TLargeinteger;
begin // Get the free drive space
  GetDiskFreeSpaceEx('Z:\', FreeAvailable, TotalSpace, @TotalFree);

  ShowMessage('Drive Z has ' + IntToStr(FreeAvailable div 1024) +
    'Kb of free space');
end;

Metal_Snake2 3. Nov 2007 23:08

Re: Herausfinden ob Festplatte/Wechselmedium schreibgeschutz
 
herzlichen dank an alle antwortenden,

Ihr habt mir weitergeholen!

@ErazerZ: ich hab mal deinen code verwendet, das war genau was ich suchte, nochmal thx!

@Muetze1: Dein Beitrag ist super, ich finds gut das es so umfassendt ist, ich hatte mir ja garnicht gedanken drüber gemacht
welche Ausnahmen es geben könnte! Daher ist deine Antwort inspirierend! Jedoch reicht mir erstmal nur ne einfach abfrage über datei- handles da ich nur Festplatten und Wechselmedien betrachten wollte!

Muetze1 4. Nov 2007 02:02

Re: Herausfinden ob Festplatte/Wechselmedium schreibgeschutz
 
Zitat:

Zitat von hathor
Bei mir geht's damit:

Also wenn Z:\ bei dir eine Freigabe ist, schön. Ich habe eine Samba Freigabe auf meinem kleinen Linux System und dort schlägt das genauso fehl wie bei der Angabe einer Win98 Freigabe...

Gonzo2 4. Nov 2007 04:54

Re: Herausfinden ob Festplatte/Wechselmedium schreibgeschutz
 
Ein Provisorium! Schreib einfach eine Funktion mit dem Laufwerk als Paramiter und Boolean als Rückgabewert. In der Funktion intergrierst Du paar Zeilen mit denen Du versuchst eine ein Byte große Datei auf dem Laufwerk zu speichern. Überprüfe ob es geklappt hat. Wenn nicht, dann hast Du entweder keine Rechte drauf zu schreiben, das Laufwerk ist schreibgeschützt oder einfach bis auf den letzten Byte voll. Wie auch immer, du weißt ob du dort schreiben kannst. Achja, lösche dann wieder die Testdatei.

Muetze1 4. Nov 2007 14:34

Re: Herausfinden ob Festplatte/Wechselmedium schreibgeschutz
 
Zitat:

Zitat von Gonzo2
Ein Provisorium! Schreib einfach eine Funktion mit dem Laufwerk als Paramiter und Boolean als Rückgabewert. In der Funktion intergrierst Du paar Zeilen mit denen Du versuchst eine ein Byte große Datei auf dem Laufwerk zu speichern. Überprüfe ob es geklappt hat. Wenn nicht, dann hast Du entweder keine Rechte drauf zu schreiben, das Laufwerk ist schreibgeschützt oder einfach bis auf den letzten Byte voll. Wie auch immer, du weißt ob du dort schreiben kannst. Achja, lösche dann wieder die Testdatei.

Die Lösung von ErazerZ reicht schon vollkommen aus, denn das Öffnen der Datei zum Schreiben würde schon fehlschlagen. Somit brauchst du erst gar nicht anfangen Daten in ihr zu speichern.

himitsu 7. Nov 2007 16:38

Re: Herausfinden ob Festplatte/Wechselmedium schreibgeschutz
 
Zitat:

Zitat von Muetze1
Die Lösung von ErazerZ reicht schon vollkommen aus, denn das Öffnen der Datei zum Schreiben würde schon fehlschlagen. Somit brauchst du erst gar nicht anfangen Daten in ihr zu speichern.

aber zur Sicherheit wäre es nich schlecht auch danach noch das Schreiben zu überwachen, auch wenn es meißtens wohl so ausreichend wäre ... ich werf dafür einfach mal MSDN-Library durchsuchenLockFile in den Raum :angel:
Datei kann geöffnet und beschrieben werden, aber nicht in dem gesperrten Bereich.

Muetze1 7. Nov 2007 16:54

Re: Herausfinden ob Festplatte/Wechselmedium schreibgeschutz
 
LockFile() kann/macht Probleme unter Vista mit dem neuen SMB2 Protokoll (also auf Freigaben). Es ist nicht gesagt, dass z.B. andere Freigaben und Dateiangaben LockFile() unterstützen.

himitsu 7. Nov 2007 19:47

Re: Herausfinden ob Festplatte/Wechselmedium schreibgeschutz
 
es wird ja immer besser :shock:
nja, aber wenn LockFile unterstützt wird, dann kann damit theoretisch etwas gesperrt sein.

und wie du auch schon sagtest, am Einfachsten/Sichersten ist wohl der Schreibversuch.
Wenn die Datei mit Schreibrechten geöffnet werden kann und die Daten geschrieben werden konnten, dann ist es möglich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:34 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