relative Datei angaben
-
Hallo,
Wie erstellt man zuverlässlich relative Pfadangaben, um (Text)-Dateien einzubinden, indem man nur innerhalb des Projektordners durch Unterdateien/Oberdateien einen korrekten Link erstellt. Genau genommen, geht es mir darum, Daten in einer Textdatei zu verwalten und somit quasi dauerhaft zu speichern. Speziell jetzt unter Windows, aber darf es denn da überhaupt unterschiede geben?
-
@Ichwerdennsonst Keine Laufwerksangaben und der Pfad darf nicht mit dem Pathseperator / oder \ beginnen.
Übergeordnete Ordner erreicht man mit ..
-
Wenns plattformunabhängig sein soll immer / als Trennzeichen verwenden. Funktioniert auf Windows auch. Umgekehrt geht \ auf den POSIX Systemen nicht.
-
@hustbaer sagte in relative Datei angaben:
immer / als Trennzeichen verwenden. Funktioniert auf Windows auch.
Dem Windows-Explorer gefällt das nicht.
-
@DirkB sagte in relative Datei angaben:
@hustbaer sagte in relative Datei angaben:
immer / als Trennzeichen verwenden. Funktioniert auf Windows auch.
Dem Windows-Explorer gefällt das nicht.
Doch, gefällt auch dem (ab Windowes 7?).
-
Ja, ein paar Windows-Programme haben da glaube ich noch mit ein paar Corner-Cases Probleme. Aber allgemein geht's. Speziell die WinAPI sollte keine Probleme damit haben.
-
Aber wenn ich mich jetzt in einer Datei Dat1.1 befinde, die in einem Ordner Ordn1.1 gespeichert ist und ich will auf eine andere Datei Dat2.1 zugreifen, die in dem Ordner Ordn1.2 gespeichert ist, der zusammen mit Ordn1.1 in Ordn1 gespeichert ist, wäre der korrekte Pfad dann mit Escape-Sequenzen ..\\..\\Ordn1.2\\Dat2.1 ?!? Und wenn ich das ganze Programm jetzt von Windows nach Linux rüberziehe, um es dort zu kompilieren, dann bleibt die Ordnerstruktur erhalten?
-
@Ichwerdennsonst Du befindest dich nicht in einer Datei sonder nin dem zugehörigen Ordner.
Demnach kommst du mit .. in den übergeordneten Ordner
Darum reicht../Ordn1.2/Dat2.1
@Ichwerdennsonst sagte in relative Datei angaben:
Und wenn ich das ganze Programm jetzt von Windows nach Linux rüberziehe, um es dort zu kompilieren, dann bleibt die Ordnerstruktur erhalten?
Linux besteht auf Groß-/Kleinschreibung, Windows nicht.
Wenn der Ordner in wirklichkeit ordn1.2 heißt, aber im Programm * ../Ordn1.2/Dat2.1* steht, bekommst du unter Linux Probleme.Die Ordnerstruktur zu deinem Programm legst doch aber auch du an.
Die Ordner sind ja nicht so einfach da - wenn doch, können es es Systemordner sein und die unterscheiden sich zwischen Windows und Linux
-
@DirkB Ah Danke, jetzt wird mir schon vieles klarer. Wenn ich jetzt dann wirklich mal genau zwei Ordner nach oben muss, kann ich dann ..\\..\\ schreiben?
-
@Ichwerdennsonst sagte in relative Datei angaben:
Wenn ich jetzt dann wirklich mal genau zwei Ordner nach oben muss, kann ich dann ..\\..\\ schreiben?
Wenn es dir reicht dass es auf Windows funktioniert, dann ja. Wenn es auch auf anderen Systemen laufen soll solltest du besser
../../
verwenden.
-
@Ichwerdennsonst Mach doch die Eingabeaufforderung auf und spiele mit den Befehlen (z.B. cd, dir, type) rum
Es gibt auch ein Windows-Subsystem für Linux.
Damit kann man unter Windows Linux-Programme starten.
(der gcc ist auch nur ein Programm)Da ist auch eine Konsole/Terminal mit einer Shell dabei.
Erste Informationen unter https://de.wikipedia.org/wiki/Windows-Subsystem_für_Linux
-
@hustbaer Naja, es soll einfach Systemunabhänig sein oder von meiner Ordnerstruktur abhängig
-
Jedenfalls funktioniert das immer noch nicht
// 12345.cpp: Definiert den Einstiegspunkt für die Anwendung. // #include "12345.h" #include <fstream> using namespace std; int main(int argc, char* argv[]) { ifstream Datei{"../Textdateien/daten1.txt"}; string n{}; if (Datei) { Datei >> n; cout << "Datei:" << n << endl; } return 0; }
Die Dateistruktur ist folgende:
12345
->12345
->->12345.cpp
->Textdateien
->->daten1.txt
Gebe ich den vollständigen Pfad bis zum Laufwerk an funktioniert es ohne Probleme.
In dem Fall:
C:\Users\Tim\source\repos\12345\Textdateien\daten1.txt
-
Relative Pfade (die zur Laufzeit ausgewertet werden) sind relativ zum aktuellen Arbeitsverzeichnis, nicht zum Source-Verzeichnis. Je nachdem, aus welchem Verzeichnis du dein Programm also startest, wird es mal funktionieren und mal nicht.
-
Ok Danke!
-
Hallo,
Wenn es systemunabhängig werden soll must du auch auf die Zeichencodierung achten. Solange du bei Zeichen aus der ersten Seite der ASCII Page bleibst ist das kein Problem, sonst aber doch. Windows verwendet ja Codepage bzw. Unicode bei den passenden Funktionen. Bei Linux wäre es UTF8. Da musst du dich auf ein Verfahren einigen und bei Bedarf konvertieren.
-
@Braunstein sagte in relative Datei angaben:
Solange du bei Zeichen aus der ersten Seite der ASCII Page bleibst ist das kein Problem
Falls du damit die Zeichen 0...127 meinst: mehr gibt es in ASCII nicht
-
@hustbaer
Ok, dann eben. Solange du ASCII Zeichen verwendest.
Besser so?
-
-
@hustbaer
Gut. Das sollte es dann aber sein.