Entwickler-Ecke

Internet / Netzwerk - Ordner erstellen, Dateien kopieren im LAN


Bronstein - Do 02.03.06 11:18
Titel: Ordner erstellen, Dateien kopieren im LAN
Möchte Dateien von einem Rechner zu einem anderen Rechner im Netzwerk verschieben.
Muss updates von Programmen machen, dazu muss ich bei jedem Rechner im selben Verzeichnis einen neuen Order erstellen und in diesen dann ein paar Dateien hineinkopieren. Wie kann ich das lösen. Mit der Komponente IdIcmpClient1 prüfe ich schon über den PING-Befehl ob der Rechner angeschaltet ist.
Wie kann ich aber die Dateien verschieben?


jasocul - Do 02.03.06 11:28

Ist denn das Verzeichnis auf dem fremden Rechner überhaupt für Schreibzugriffe freigegeben?


Bronstein - Do 02.03.06 11:32

Ja, bin Admin


Narses - Do 02.03.06 11:38

Moin!

Dann kannst du die normalen Dateifunktionen nutzen, aber mit UNC, geht so:

C:\test.txt auf dem PC "meinPC" ist: \\meinPC\c$\test.txt im Netzwerk. :wink:

cu
Narses


MSCH - Do 02.03.06 11:45

sofern die Admin-Freigaben da sind sollte das funktionieren.
aber eleganter wäre:

stelle deine Updates auf einen Webserver oder ftp-server (der ja in der Regel immer online ist)und lasse
doch die Clients sich selbst die neuesten Daten holen.
das geht wesentlich einfacher als das was du vorhast.
Das einzige was du dann brauchst ist einen ftp/http-client und a bissle Versionshistory, nicht dass
die clients sich immer das letzte Update holen, was sie aber schon haben.

Gebe der Update-funktion dann statt einer festen IP-Adresse einen DNS-Namen, so dass du in der
wahl der IP frei bist und diese auch noch ohne Code-Änderung verändern kannst.


grez
msch


Bronstein - Do 02.03.06 12:16

Super funktioniert perfekt. Danke!!!
Jetzt muss ich aber prüfen ob die Datei bereits geöffnet ist, habe folgende Funktionen mal versucht, aber diese funktionieren nicht:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
function IsFileOpen(const fName: TFileName): Boolean;
var 
  HFileRes: HFILE; 
begin 
  Result := False; 
  HFileRes := CreateFile(PChar(fName),
                         GENERIC_READ or GENERIC_WRITE,
                         0,
                         nil,
                         OPEN_EXISTING, 
                         FILE_ATTRIBUTE_NORMAL, 
                         0); 
  Result := (HFileRes = INVALID_HANDLE_VALUE); 
end;


function IsFileInUse(FileName: string): boolean;
var
  TestFile: HFILE;
begin
  TestFile:=CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0nil,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

  result:=TestFile=INVALID_HANDLE_VALUE;
  if not result then CloseHandle(TestFile);
end;


Möchte einfach eine Funktion die mir prüft ob eine Datei bereits geöffnet ist oder nicht, dazu true oder false zurückgeben.

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt


Bronstein - Fr 03.03.06 12:35

Habe noch ein Problem, ich kann die Dateien zwar in Verzeichnisse schieben die freigegeben sind. Gibt es auch eine Möglichkeit auf Ordner zugreifen die nicht freigegeben sind. (Ich bin ja Admin)
Ich glaube mit Batch-Dateien gibt es da eine Möglichkeit

Wenn ich //Rechnername eingebe sehe ich aber nur die Dateien die freigegeben sind.


BenBE - Fr 03.03.06 14:35

Wenn Du Admin bist, kannst Du Dir über die Computer-Verwaltung weitere Ordner ohne Probleme auf dem Fremdrechner freigeben. Weiterhin gibt es für jede Festplatte normalerweise auch immer eine Administrative Freigabe ;-)

Freigaben auf Fremdrechnern kann man auch Programmseitig anlegen, falls Du das meinst ... Siehe WNet-API ;-)