Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Verzeichnisoperationen (https://www.delphipraxis.net/107870-verzeichnisoperationen.html)

Poring 3. Feb 2008 22:20


Verzeichnisoperationen
 
Hallo,

ich möchte gerne eine Datei downloaden.
Also habe ich es mal damit probiert:
Delphi-Quellcode:
UrlDownloadToFile(nil, 'http://server.de/test.txt','test.txt', 0, nil);
Ich möchte gerne die Datei test.txt in einen Ordner der noch nicht existiert reinladen, undzwar in einen unterordner wo das Programm ist. Mit '\test\test.txt' zum speichern geht leider nicht.
Was könnte ich tun?

Mfg

Muetze1 3. Feb 2008 22:28

Re: Download Pfadangabe?
 
Delphi-Referenz durchsuchenForceDirectories(), Delphi-Referenz durchsuchenExtractFilePath() und Delphi-Referenz durchsuchenApplication.EXEName

Poring 3. Feb 2008 22:33

Re: Download Pfadangabe?
 
Ein kleines Beispiel könntest du mir nich auf die schnelle nennen oder?

Matze 3. Feb 2008 22:35

Re: Download Pfadangabe?
 
Schaue doch mal in der Hilfe nach, was die einzelnen Funktionen machen (F1 drücken). Dann kommst du ganz schnell auf das gewünschte Ergebnis, glaub mir. ;)

Was du noch wissen solltest: URLDownloadToFile kann keine Verzeichnisse erstellen. Genau das ist deine Aufgabe, dies vor dem Aufruf der Funktion zu tun.

Poring 3. Feb 2008 22:44

Re: Download Pfadangabe?
 
Das Problem ist dies geht nicht:
Delphi-Quellcode:
UrlDownloadToFile(nil, 'http://server.de/test.txt', ExtractFilePath(ParamStr(0)) + 'test.txt', 0, nil);
Also das ich den Ordner erstellen kann geht nun mit
Delphi-Quellcode:
ForceDirectories(ExtractFilePath(ParamStr(0)) +'test');
Edit:
Ahh cool ok wenn ich den Ordner habe geht es mit 'test\test.txt'
Geht das löschen genauso?

Matze 3. Feb 2008 22:49

Re: Download Pfadangabe?
 
Zitat:

Zitat von Poring
Geht das löschen genauso?

Dateien kannst du mit Delphi-Referenz durchsuchenDeleteFile löschen und anschließend das leere Verzeichnis mittels Delphi-Referenz durchsuchenRemoveDir entfernen.

Poring 3. Feb 2008 22:50

Re: Download Pfadangabe?
 
Ui cool herzlichen dank! :)
Kann man auch irgendwie vom jetztigen Pfad eins hoch gehen?
Sprich man ist in dem ordner test will aber in dem ordner da drüber was machen?
Also wie kann ich den übergeordneten Ordner als Verzeichnis wählen?
Delphi-Quellcode:
DeleteFile(ExtractFilePath(ParamStr(-1)) + 'test.txt');
Geht leider nicht :(

Matze 3. Feb 2008 23:11

Re: Download Pfadangabe?
 
Ändere den Thementitel bitte mal in "Verzeichnisoperationen" oder ähnliches, denn das deckt alle deine Fragen ab.

Ich habe mal schnell eine kleine Funktion geschrieben. Es geht sicher schöner, aber zur Not reicht's. ;)

Delphi-Quellcode:
function GetPreviousDir(CurrentPath: string): string;
begin
  Result := ExtractFilePath(Copy(CurrentPath, 1,
    Length(CurrentPath) - Length(ExtractFilename(CurrentPath)) - 1));
end;

Poring 3. Feb 2008 23:14

Re: Download Pfadangabe?
 
Delphi-Quellcode:
function GetPreviousDir(CurrentPath: string): string;
begin
  Result := ExtractFilePath(Copy(CurrentPath, 1,
    Length(CurrentPath) - Length(ExtractFilename(CurrentPath)) - 1));
end;


DeleteFile(EGetPreviousDir + 'test.txt');
Wäre dies dann so?

Matze 3. Feb 2008 23:16

Re: Verzeichnisoperationen
 
Der Aufruf erfolgt viel einfacher:

Delphi-Quellcode:
GetPreviousDir('C:\Programme\Hallo\Du\');
// liefert dir: C:\Programme\Hallo\
Du übergibst direkt den Pfad und erhälst den übergeordneten zurück. Voraussetzung ist, dass du den abschließenden Backslash angibst bzw einen Dateinamen.

Edit: Ups, verlesen. Ja das müsste so passen.
Edit 2: Ähm ne, den aktuellen Pfad musst du schon übergeben. *g*

Poring 3. Feb 2008 23:19

Re: Verzeichnisoperationen
 
Nich immer so schnell Posten .. ich weiß
Delphi-Quellcode:
DeleteFile(GetPreviousDir(ExtractFilePath(ParamStr(0))) + 'test.txt');
Jipi, Herzlichen Dank.

Oki... und wie ist das mit CopyFile?
Delphi-Quellcode:
 Copyfile((ExtractFilePath(ParamStr(0)) + 'test.txt'), (GetPreviousDir(ExtractFilePath(ParamStr(0))) + 'test.txt'), false);
Das geht leider nicht :(

Aurelius 4. Feb 2008 06:45

Re: Verzeichnisoperationen
 
Was ist dass den für ein Fehler?

Meine Kristallkugel sagt mir, dass
Delphi-Quellcode:
GetPreviousDir(ExtractFilePath(ParamStr(0))) + 'test.txt'
so abgeändert werden muss
Delphi-Quellcode:
GetPreviousDir(ExtractFilePath(ParamStr(0))) + '\test.txt'
//edit: Falscher Slash :D

Matze 4. Feb 2008 07:41

Re: Verzeichnisoperationen
 
Nein, die Funktion gibt den Pfad mit letztem Backslash zurück.

Achte auf die Compiler-Meldungen, die sagen alles:

Zitat:

[Pascal Fehler] Unit1.pas(35): E2010 Inkompatible Typen: 'string' und 'PAnsiChar'
Folglich muss es so heißen:

Code:
Copyfile([color=#ff0000][b]PChar([/b][/color]ExtractFilePath(ParamStr(0)) + [color=#000080]'test.txt'[/color][color=#ff0000][b])[/b][/color],
  [color=#ff0000][b]PChar([/b][/color]GetPreviousDir(ExtractFilePath(ParamStr(0))) + [color=#000080]'test.txt'[/color][color=#ff0000][b])[/b][/color], false);
Bzw. Delphi-Referenz durchsuchenPAnsiChar anstelle von Delphi-Referenz durchsuchenPChar.

Edit: Für mich sieht es so aus, als löscht du zuerst eine Datei mit Delphi-Referenz durchsuchenDeleteFile, um diese dann mit Delphi-Referenz durchsuchenCopyFile ersetzen zu können. Falls dies der Fall sein sollte, dann schau dir den 3. Parameter von Delphi-Referenz durchsuchenCopyFile an. Ist dieser true wird eine existierende Datei überschrieben.

DeddyH 4. Feb 2008 08:18

Re: Verzeichnisoperationen
 
Zitat:

Zitat von Matze
Ist dieser true wird eine existierende Datei überschrieben.

Genau andersherum, deshalb heißt er ja auch FailIfExists ;)

Matze 4. Feb 2008 08:43

Re: Verzeichnisoperationen
 
Zitat:

Zitat von DeddyH
Genau andersherum, deshalb heißt er ja auch FailIfExists ;)

Ups, hätte ich doch lieber in die OH geschaut. :mrgreen: Ich hatte ein OverwriteIfExists in Erinnerung.

Dann ist das DeleteFile soweiso überflüssig, falls es wirklich dazu dient, die existierende Datei vor dem Kopieren zu löschen.


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