TXT einlesen und den Pfad als String
-
hallo leute,
ich hab mal wieder ein kleines problem. ich habe mir einen code geschrieben der txts einließt. das klappt auch wunderbar. sieht folgendermaßen aus:
LV = array_from_csv("C:\\LV.txt", '#');die raute ist das trennzeichen. da ließt der dann die txt direkt von C:\ ein. jetzt möchte ich aber gerne, dass er immer die datei aus dem verzeichnis einließt, in der auch die *.exe liegt.
ausgelesen habe ich den aktuellen pfad schon über getcw. und nun muss ich den string in dem der pfad steht irgendwie mit dem dateinamen verknüften und da hört es bei mir leider auf. denke da an sowas in der art:
static char cpath[256]; string verzeichnis; verzeichnis = getcwd(cpath,256); LV = array_from_csv(verzeichnis & "LW.txt", '#');funktioniert aber leider nicht

ist sicher ne kleinigkeit, vielen dank schonmal...
-
Stichwort stringstream. Oder simpler:
std::string myString = meinVerzeichnis; myString += "/file.txt";oder so...
-
mh, ok das könnte funktionieren. da ich aber ca 20 txt hintereinander einlesen muss, würde ich lieber einen befehl haben mit dem ich den string und den dateinamen direkt im programmaufruf verbinden kann. muss doch sicher auch gehen..
-
std::string komplett = std::string(verzeichnis) + "/" + dateiname;
-
& durch + ersetzen:
LV = array_from_csv(verzeichnis + "/LW.txt", '#');Übrigens:
Das Arbeitsverzeichnis ist nicht (immer) das Verzeichnis, in dem das Programm liegt.Ach ja, und das ist kein Programmaufruf, sondern ein Funktionsaufruf.
-
ok, danke auch für deine schnelle antworten
sieht dann also so aus:
CV = array_from_csv(verzeichnis + "/" + cap.txt, '#');das problem ist nur, das er das "verzeichnis + "/" + cap.txt" nicht mehr als string erkennt. kann ich das irgendwie deklarieren ohne, dass ich ne neue variable einführen muss?
-
Bist ja auch ein Scherzkeks... wie wär's mit:
CV = array_from_csv(verzeichnis + "/cap.txt", '#');
-
ah ok, so geht es:
CV = array_from_csv(verzeichnis + "/cap.txt", '#');aber was heißt nicht immer??? wann denn nicht?
und wie kann ich sicher gehen, dass ich immer das verzeichnis des programms habe?
danke!!!
-
So zum Beispiel (getBasePath ist die interessante Funktion):
#ifdef __WIN32__ std::string getExeFileName() { char pathName[2048]; if (!GetModuleFileName(NULL,pathName,2048))return ""; return pathName; } #else std::string getExeFileName() { char pathName[2048]; ssize_t ret=readlink("/proc/self/exe",pathName,2048); if (ret==2048 || ret==-1)return ""; pathName[ret]=0; return pathName; } #endif std::string extractFileDir(const std::string& source) { const int strlen=source.length(); for (int i=strlen-1;i>0;i--)if (source[i]=='\\' || source[i]=='/')return source.substr(0,i); return ""; } std::string getBasePath() { return extractFileDir(getBasePath()); }
-
ootobbyoo schrieb:
aber was heißt nicht immer??? wann denn nicht?
Wenn jemand aus einem anderen Verzeichnis heraus dein Programm ausführt.
und wie kann ich sicher gehen, dass ich immer das verzeichnis des programms habe?
Eigentlich gar nicht. Zumindest nicht mit Standardmitteln. Mit irgendwelchen Betriebssystemmethoden (auch portabel gekapselt in boost::filesystem) mag das aber gehen.
-
ui, das ist aber recht kompliziert. ich lass mir einfach das verzeichnis vorher ausgeben. dann hab ich eine kontrolle. zudem wird das programm nur von mir im korrekten verzeichnis ausgeführt.
aber trotzdem vielen dank nochmal, ihr habt mir sehr weitergeholfen!!!