Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Fragen zu Laufwerken und Dateien

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
21.03.2007, 16:39 Uhr
~Progen
Gast


Hallo, ich habe ein Problem, denn ich weiß nicht wie man herausfindet auf welcher Festplatte (C, D, F, ...) sich Windows (und damit meine ich insbesonders den Ordner Programme) befindet. Das muss ich wissen, denn ich will von der CD Dateien auf die Festplatte speichern.
Und damit komme ich auch gleich zu meinen nächsten Fragen:
1. Wie finde ich das Laufwerk heraus indem sich die CD, von der das Programm gerade abgespielt wird heraus (wobei sich diese Frage wohl mit der aller ersten erledigt hat, wenn es nicht allzu große Abweichungen gibt)?
2. Wie erstelle ich eine neuen Ordner vom laufenden Programm aus?
3. Wie kopiert man überhaupt Dateien vom laufenden Programm aus?
Das sind jetzt viele Fragen aufeinmal. Ich hoffe trotzdem, dass ihr mir sie möglichst genau beantworten könnt.
PS: Ich benütut den Borland C++ Builder 6.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.03.2007, 17:29 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Hallo!

1: ExtractFileDrive(ParamStr(0)) oder ExtractFileDrive(Application->ExeName)
2. CreateDir("C:\\Verzeichnisname");
3. Copyfile("quelldatei", "kopierziel", true);
Dabei gibt der letzte Parameter von Copyfile an, wie die Funktion agieren soll, wenn "kopierziel" bereits existiert. true = die Datei wird nicht kopiert. false = die Datei wird kopiert und die bereitsvorhandene somit überschrieben.

Die Partition, auf der sich Windows befindet, lässt sich nicht so einfach schlussfolgern. Generell solltest du niemals einfach in %WINDIR%\Program Files Dateien speichern, sondern den Anwender immer vorher nach einem Verzeichnis fragen, in das installiert werden soll!
Dann kannst du z.B. das Systemverzeichnis mit GetSystemDirectory() ermitteln.

Dieser Post wurde am 21.03.2007 um 17:29 Uhr von Reyx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.03.2007, 18:35 Uhr
~Progen
Gast


Hallo,
erstmal danke für die Antwort. "CreateDir("C\Verzeichnisname");" funktioniert super, aber bei den anderen gibt es Probleme:
1. Bei "Copyfile("quelldatei", "kopierziel", true);" kommt bei mir die Fehlermeldung
[C++ Fehler] Unit1.cpp(20): E2268 Aufruf der undefinierten Funktion 'Copyfile'. Ich denke mal ich muss eine *.cpp laden, aber welche???
2. Bei "ExtractFileDrive(ParamStr(0)) oder ExtractFileDrive(Application->ExeName)" und auch bei "GetSystemDirectory()" weiß ich nicht was die Parameter bedeuten und wie ich denn Laufwerksbuchstaben dann abrufe. Außerdem: Was ist der unterschied???
Ich hoffe, dass mir jemand helfen kann.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.03.2007, 21:45 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


ExtractFileDrive(ParamStr(0)) gibt dir einfach nur einen String im Stil von "C:\\", "D:\\" usw., der dir das Laufwerk angibt, auf dem die Programmdatei selbst liegt. ParamStr(0) und Application->ExeName geben beide den Dateinamen der Anwendung, also z.B. "myApp.exe".

Copyfile war ein kleiner Flüchtigkeitsfehler von mir, sorry ;)
Es heißt CopyFile, also mit großen F.

GetSystemDirectory() gibt dir das Systemverzeichnis. Die Funktion übernimmt einen Parameter als buffer, also die Variable, in die der String geschrieben wird, und als zweites Argument die Größe des Buffers.
Anwendung z.B. wie Folgt (dir enthält danach das Verzeichnis):

C++:
char *buff[MAX_PATH];
GetSystemDirectory((char*)(&buff), sizeof(buff));
AnsiString dir = (char*)(&buff);


Dieser Post wurde am 21.03.2007 um 21:46 Uhr von Reyx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.03.2007, 14:41 Uhr
~Progen
Gast


Hallo,
hat diesmal leider wieder nicht geklappt:

C++:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  CreateDir("C:\\Hallo");
  CopyFile("C:\\Hallo", "D:\\Programme\\Hallo", true);
}
//---------------------------------------------------------------------------


Was ist daran falsch(CreateDir funktioniert, CopyFile nicht)???

Bei "ExtractFileDrive(ParamStr(0))" weiß ich leider immer noch nicht wie ich den Laufwerksbuchstaben abrufe. Und nur damit wir uns richtig verstehen, in dem Parameter von ParamStr() und bei Application->ExeName gehört der Name der Datei hin die ich suche??? Ist es dabei egal ob es in einem Ordner liegt oder nicht ???
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.03.2007, 18:03 Uhr
Kest
saint


Hi!
Mit >CopyFile("C:\\Hallo", "D:\\Programme\\Hallo", true);< versuchst du ein Verzeichnis zu kopieren, was logischerweise nicht funktioniert.
Man könnte z.B.:
CopyFile("C:\\Hallo\\a.txt", "D:\\Programme\\Hallo\\b.txt", true);
Dabei müssen aber sowohl >"C:\\Hallo\\a.txt"< als auch >"D:\\Programme\\Hallo"< existieren.

Mit >Wie finde ich das Laufwerk heraus< würde ich folgendermaßen vorgehen:

C++:
const char *dir=getenv("systemdrive");

--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.

Dieser Post wurde am 22.03.2007 um 18:10 Uhr von Kest editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
22.03.2007, 18:20 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Wieso nicht die VCL benutzen, wenn du sie schon hast?

Was genau verstehst du denn an ExtractFileDrive() nicht?
Die Funktion bekommt einen Dateipfad und liefert den Laufwerksbuchstaben zurück, auf dem sich die Datei befindet.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
23.03.2007, 16:17 Uhr
~Progen
Gast


Hallo,
nachdem ich jetzt ein paar mal alles ausprobiert habe, hat doch alles geklappt. Danke schon mal dafür. Rein aus Interesse stellten sich mir noch diese Fragen:
1. @Kest: hat geschrieben:

C++:
const char *dir=getenv("systemdrive");


funktioniert das auch bei anderen Laufwerken??? Wenn ja was muss ich dann statt "systemdrive" eingeben???
2. @Kest und Reyx: wieso mit alles mit char*???
Ich hoffe ihr habt auch noch Lust mir diese Fragen zu beantworten.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
23.03.2007, 16:28 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


1. Mit der Funktion kannst du Umgebungsvariablen (environment variables, daher getenv()) auslesen. Dies hat nichts mit Laufwerken an sich zu tun, sondern eben mit den Umgebungsvariablen, die beliebig verstellt werden können.

2. Die Funktion, die du haben willst, existiert nicht in der VCL. Du musst also die WinAPI direkt verwenden (die von Windows bereitgestellte Schnittstelle). Und die kennt natürlich logischerweise keinen AnsiString sondern nur char, wchar_t (für Unicode-Strings) und Aliase.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
23.03.2007, 17:27 Uhr
Kest
saint


Nur so, damit du weißt:
öffne mal die >Eingabeaufforderung< und gib den Befehl >set< ein und drück mal auf Enter. Jetzt siehst du alle Umgebungsvariablen, die du mit >getenv< auslesen kannst. Und vor dem Wort >verstellen< sollte man auch keine Angst haben.

Zu Laufwerken:
Die Umgebunsvariablen gelten für das auf der Patition installierte Betriebsystem. Wenn man also seinen Windows, der auf >C:< installiert ist, startet, gelten die Umgebungsvariablen für >C:<, außer man verstellt sie, was man eher selten tut, besonders was >systemdrive< angeht, weil die Variable automatisch gesetzt wird, ist also sozusagen konstant.



Also in diesem Fall sollst du >char*< als einen String verstehen. Aber um das richtig zu verstehen, lies mal das und dann das
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: