Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ordner auf Schreibrechte prüfen (https://www.delphipraxis.net/87479-ordner-auf-schreibrechte-pruefen.html)

DelphiManiac 1. Mär 2007 08:36


Ordner auf Schreibrechte prüfen
 
Hi Community,

ja ihr denkt bestimmt ich habe die Suche nicht bemüht, aber genau das habe ich gemacht und habe dort leider keine Infos
zu folgedem Problem gefunden:

-> Ich muss am Ende eines Ablaufes Dateien in einem Netzwerkordner ablegen, diesen Ordner und Unterordner müsste
ich vorher allerdings auf Schreibrechte prüfen (ob die Dateien auch wirklich dort abgelegt werden können / dürfen)
von dem User.

Dürfte ja kein Hexenwerk sein, aber mir fehlt der Ansatz, ...
Danke schonmal im Vorraus.

Gruß
DelphiManiac

matashen 1. Mär 2007 08:45

Re: Ordner auf Schreibrechte prüfen
 
Hallo,

ich hab das hier mal gefunden um Auf Netzlaufwerk(auch mit Unterordner) zu mappen

Delphi-Quellcode:
function ConnectToNetworkDriveW(LocalName: WideString; RemoteName: wideString; Username: WideString; Password: WideString;
  RestoreAtLogon: boolean): DWORD;
var
  NetResource      : TNetResourceW;
  dwFlags          : DWORD;
begin
  dwFlags := 0;
  ZeroMemory(@NetResource, sizeof(TNetResource));
  with NetResource do
  begin
    dwType := RESOURCETYPE_ANY;
    lpLocalName := PWideChar(LocalName);
    lpRemoteName := PwideChar(RemoteName);
    lpProvider := nil;
  end;

  if (RestoreAtLogon) then
    dwFlags := dwFlags or CONNECT_UPDATE_PROFILE;

  Result := WNetAddConnection2W(NetResource, PWideChar(Password), PWideChar(Username), dwFlags);
end;

function DisconnectNetworkDrivew(Name: WideString): DWORD;
begin
  result := WNetCancelConnection2W(PWideChar(Name), CONNECT_UPDATE_PROFILE, True);
end;
Dann mußt du eigentlich nur ein filecreate machen und auswerten ob du diese Datei anlegen darfst, wenn ja hast du schreibrechte.

DelphiManiac 1. Mär 2007 08:50

Re: Ordner auf Schreibrechte prüfen
 
@matashen

Hey danke, aber ich glaube das ist etwas oversized für mein Problem:
Es ist ein User (es gibt nur den einen der der die Software benutzen kann) angemeldet,
dann will ich einfach prüfen, ob er im Order 'z:\\Test\Daten\' Dateien ablegen kann...
Klar ich könnte versuchen eine Anzulegen und dann gucken, ob sie da ist, aber es muss ja auch schöner gehen, oder??

matashen 1. Mär 2007 08:55

Re: Ordner auf Schreibrechte prüfen
 
wenn du eh schon eine verbindung zu dem Ziellaufwerk hast, reicht im grunde fogendes:

if filecreate('z:\\Test\Daten\'+Zieldatei)>0 then etc

else keine schreibrechte


Gruß Matthias

DelphiManiac 1. Mär 2007 09:06

Re: Ordner auf Schreibrechte prüfen
 
Hallo, ja ich glaube diese Funtkion habe ich gesucht

Delphi-Quellcode:
  if filecreate('C:\TestOrdner\test.txt') > 0 then
  begin
    ShowMessage('Anlegen der Datei erfolgreich');
  end;
Meine Frage aber ist, wenn ich die Datei erstelle, dann hängt mein Programm noch 'auf der Datei', das heißt, ich kann die
Datei nicht (bspw. über den Explorer löschen). Warum ist das so?
Gruß
DelphiManiac

matashen 1. Mär 2007 09:19

Re: Ordner auf Schreibrechte prüfen
 
Warum das so ist, kann ich dir nicht sagen da ich filecreate selten nutze, ich weis nur das der Rückgabewert von filecreate das handle für den Dateizugriff ist.

Es gibt noch ne andere Möglichkeit ne Datei zu erzeugen:

Delphi-Quellcode:
var f:textfile;
.
.
assignfile(f,meinezieldatei)
{$I-}
rewrite(f);
if ioresult=0 then Showmessage("Datei erfolgreich geschrieben")
else Showmessage("Kein Zugriff")
closefile(f);
{$I+}
aber ob dies besser ist, weis ich nicht, kannst ja mal ausprobieren

Gruß Matthias

JocalAreaNetwork 1. Mär 2007 09:28

Re: Ordner auf Schreibrechte prüfen
 
Zitat:

Zitat von DelphiManiac
Hallo, ja ich glaube diese Funtkion habe ich gesucht

Delphi-Quellcode:
  if filecreate('C:\TestOrdner\test.txt') > 0 then
  begin
    ShowMessage('Anlegen der Datei erfolgreich');
  end;
Meine Frage aber ist, wenn ich die Datei erstelle, dann hängt mein Programm noch 'auf der Datei', das heißt, ich kann die
Datei nicht (bspw. über den Explorer löschen). Warum ist das so?
Gruß
DelphiManiac

Du wirst die Datei mit dem Programm wieder schließen müssen. ;)

DelphiManiac 1. Mär 2007 09:29

Re: Ordner auf Schreibrechte prüfen
 
Hi der Tipp mit dem Handle war super,

daran lag es nämlich, der Handle auf die Datei muss ja auch wieder freigeben werden, ansonsten hat meine Anwendung ja
die Datei in Zugriff.

Einfache Lösung hier war folgendes:

Delphi-Quellcode:
var
  Handle:Integer;
begin
  Handle:=filecreate('C:\TestOrdner\test.txt');
  if (Handle) > 0 then
  begin
    ShowMessage('Anlegen der Datei erfolgreich');
    FileClose(Handle);
  end
  else
  begin
    ShowMessage('Fehler beim Anlegen der Datei');
  end;
end;


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