zeilen weise aus txt lesen
-
Halt eben so ähnlich :
[cpp]
CString str2 = str - str.Left(str.ReverseFind('\'));
str2.Left(str.GetLength() - 3);
[/cpp]
ab das minus geht halt nicht....
-
keiner eine Idee???
-
while(str.Right(str.ReverseFind('\\'))) { str.Right(str.ReverseFind('\\')); CString str2 = str; }
Dabei macht er nciht viel
Hat viellciht jemand einen Tipp wie ich das schaffe
nur den Rest des Stringens der hinter dem letzten \ steht, weiter verarbeitet wird.Mal eine kurze erklärung :
Der string der ausgelesen wird ist einen Pfad angabe. von dem brauche ich aber nur den Namen des Files. Damit ich dann unter gleichen Namen nur andere Ordner und andere dokumentenart (txt) ein neues erstellen kann.
-
CString pfad = "C:\\temp\\projekte\\Test\\Juhu"; AfxMessageBox(pfad.Right(pfad.GetLength() - pfad.ReverseFind('\\') - 1));
-
Hallo,
ich glaube ich weiss jetzt warum das alls bei mir nicht funzt.
Ich habe im String nur ein \ stehen.
Also muss ich doch erst alle \ zu \\ machen und dann weiter wie oben beschrieben, oder??Geh das mit remove?? muss ich erst noch find sagen??
Kann mir mal einer ein bsp zeigen???
-
Das von mir gepostete Beispiel zeigt von dem CString die letzte Zeichenkette an die nach dem \\ steht. Somit hast du ja dein Beispiel schon...
-
ne das geht nicht wegen der Escapesequenzen (heissen die so??)
deswegen muss ein pfad der geöffnet werden soll zwei \\ haben sonst erkennt der das nach dem \ als befehl an
wie \nich weiss nciht ob das jetzt so richtig ist was ich gesagt habe aber ich weiss was ich meien hoffentlich ihr auch...
Ach ja wenn ich einfach bei deinem ein \ weg mache würde der compiler (linker??) lesen \' , macht aber keien sinn
-
Benutze doch einfach PathRemoveFileSpec(), dabei entfernt er die Datei vom Pfad und der Pfad bis zum Ordner bleibt übrig :
Gruß
:: NoName ::
-
ich kan doch kein CString zu char umwandeln, das sagt mir zumindest der compiler.
ich weiss wirklich nicht weiter, ich hänge seit gestern abend daran. Hab schon einige versionen getestet, aber es funzt ja keine.
Also nochmal
ich habe eine CString variabele die eine Pfad enthält, dieser Pfad hat aber immer nur ein \ dazischen statt \.Ich möchte einfach nur das ende des strings haben ( also name des Files), um diesem dann die letzten drei zeichen zu nehmen und drei neue dran zu hängen.
und natürlich vorher einen neuen Pfad, zu einem anderem Ordner, an zuhängen um daruas dann wieder ien neues file zuerstellen.Aber ich weiss nciht mehr wie und mein kopf steht auch schon wo anderes....
Also bitte ich euch, wirklich ganz lieb, um ein wenig genauere und am besten realistische beispiele.
-
schritt für schritt
zuerst bei dem ausgelesen Pfad all \ zu \\ machen.
str.Replace('\','\\');
Hierbei gibt er mir aber ungültige escapefolge als fehler aus
ohne ' ' gibt aber ebenso einen fehler aus.
hat jemand einen tip???
BIITTTEEEE
-
Ich hab dir hier mal ein kleines Beispiel geschrieben. Der Code erstellt zuerst eine neue File-Extension (er erstellt drei neue Zeichen am Ende der Datei), und dann formatiert er den String so, dass du einen neuen Pfad plus der neuen Datei hinzufügen kannst :
CString strNewExe, strNewFilePath; CFile file; if(file.Open("C:\\Test\\Test2\\Test.txt", CFile::modeRead)) { strNewExe = file.GetFileName(); PathRenameExtension((char*)(const char*) strNewExe, ".exe"); /* In strNewExe steht die Datei mit der neuen File-Extension */ AfxMessageBox(strNewExe); strNewFilePath.Format("C:\\Neuer Pfad\\Neuer Pfad\\%s", strNewExe); /* in strNewFilePath steht jetzt der neue Pfad mit der neuen Datei */ AfxMessageBox(strNewFilePath); file.Close(); }
Die Messageboxen sind zum prüfen des Inhaltes in den Strings...
Hoffe konnte dir helfen...Gruß
:: NoName ::
-
Test1Dlg.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__PathRenameExtensionA@8
Release/Test1.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweiseist der fehler der dabei ausgespuckt wird
-
Linke mal die SHLWAPI.lib mit
-
#include "Shlwapi.h"
ist drin
-
ja, du musst aber auch die lib datei beim linken mitgeben.
schreib oben mal noch
#pragma comment(lib,"Shlwapi.lib"); rein
-
Sorry, hatte ich ganz vergessen zu erwähnen.
Das hier fehlt ...#include "Shlwapi.h" #pragma comment( lib, "Shlwapi.lib" )
Gruß
:: NoName ::
-
int nTmp = strPfad.ReverseFind('\\'); strPfad.Delete(nTmp,strPfad.GetLength()-nTmp);
In strPfad steht dein Pfad mit Dateiname aus der TXT-Datei.
Nach den Delete ist der Dateinamen gelöscht und es steht nur mehr der Pfad din.Shlwapi.lib brauchst du nicht un vergrößert nur dein Programm.
Ist alles nur eine einfache Stringbearbeitung.Zu den \.
In einem CString steht nicht \\ drin außer du schreibst es explizit rein.CString test("\\\\"); Hier steht im CString jetzt \\ was 2 Zeichen sind
Wenn du etwas in den CString schreibst dann musst du Escapen.
\\Danach steht im CString aber nur mehr 1 \ da der andere \ das Escape war und wegfällt. Dies besagt der Klasse nur das jetzt ein Zeichen kommt und nicht eine Escape-Folge eingeleitet wird.
-
danke unix
heisst das aber auch das der Pfad, der aus einem File ausgelesen wird, erkannt wird auch mit nur einem \.
Da ich den Pfad brauche später, ist das mom. wichtig für mich.Ich möchte nämlich den Pfad später öffnen, um aus diesem den Inhalt auszulesen und in die txt-datei zu kopieren.
-
es gibt in windows keine pfad mit \\ außer wenn es sich um ein Netzlaufwerk handelt.
\\netz\freigabe\ordner\date.exe
es gibt in Windows auch keine Funktion, welche dir \\ als Pfad zurückgibt.
Ich habe ja bereits gesagt: \\ entsteht nur wenn du im SOurcecode direkt eine String in eine stringvariable (ob das jetzt CStrring, string,QString oder was auch immer ist egal da jeder dieser Klassen ein Escapezeichen kennen) schreibst.
-
jaja das mach ich ja.
Die Pfade stehen in CString variablen. Daher habe ich auch die Probs mit dem öffnen etc.
Ich kann aber wie gesagt nicht einfach sagen alle \ in \\ wandeln, da \ irgendwie nicht erkannt wird wegen den escapesequenzen.Wenn jemand mal ein bsp hätte wie er das bei sich geregelt hat wäre ich ihm sehr dankbar.