Delphi-PRAXiS
Seite 1 von 2  1 2      

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:19 Uhr.
Seite 1 von 2  1 2      

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