zeilen weise aus txt lesen



  • 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 \n

    ich 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 :

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/shlwapi/path/pathremovefilespec.asp

    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 Verweise

    ist 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.



  • Wofür willst du \ in \\ umwandeln?



  • Hallo!

    Möchte mich mal die Diskussion einklinken, weil ich so ein ähnliches Problem habe!

    Als Anfänger frage ich mich wie ich den schon genannten Code in eine Funktion 'DateiAuslesen' einbinden kann, die ich von der Funktion'LadenSpeichernDoc::Serialize' aufrufe?

    Kann mir jemand helfen? THX

    Gruß Markus



  • also ich habe pfade in ein Textfile abgespeichert werden. ohne \\ dazwischen.
    Diese lese ich dieser fkt aus um einmal dieses zuöffnen und den inhalt in ein neues zukopieren. Dieses neue setzt sich aus dem namen des alten zusammen, soll aber an einem anderen ort abgelegt werden.

    Ich hatte nun aber probleme den namen als einziges heraus zufiltern, da wenn ich finde \ sagte, er das als escapesequenz angesehen hat. daher wollte ich erst aus allen ein \\ machen damit ich es dann leichter habe.

    natürlich bin ich über vereinfachungen meiner vorgehensweise erfreut. 🙂

    Das File, dessen Pfad ich auslese ist ein Word-doc. Diese kann ich ja ohne probs öffnen und in eine txt, die kopie abspeichern oder??
    Das org sollte sondern so bleiben wie es ist.



  • Mach einfach folgendes:

    Du ließt den Pfad aus deiner TXT-Datei aus.

    Da steht dann im CString strPfad z.B. "c:\windows\hallo.txt"

    Mit diesem CString führst du meine Operationen aus. Übrig bleibt in strPfad nur mehr der Pfad ohne Dateiname.

    ReverseFind('\');

    Hier wird deshalb \\ übergeben weil es sonst als Escapeeinleitung erkannt wird.

    Der erste \ macht aus dem 2ten \ aber ein Zeichen.
    SOmit wird nur nach \ im CString gesucht.
    Dies habe ich aber bereits jetzt zum 3ten Mal erklärt.
    Jetzt weiß ich auch nicht mehr wie ich es dir verständlich machen soll.



  • hallo,

    es ist jetzt endlich angekommen.
    habe an deinem code noch ein bissl rum gebastelt und nu geht es bis auf eien kleinichkeit. Kann es ja mal posten

    int nTmp = inhalt.ReverseFind('\\'); 
    inhalt.Delete(nTmp-inhalt.GetLength(),nTmp);
    
    DWORD l =inhalt.GetLength();
    inhalt.Delete(1-l);
    inhalt.Delete(l,l-3); // hier spinnt er
    

    und zar tu ich an dem string noch ein wenig schnippeln.
    erst das letzte \ weg und dann soll er die letzten drei zeichen entfernen. Das macht er aber nicht.
    hast du noch einen kleinen tipp ???
    das biste mich auch erstmal los

    danke


Anmelden zum Antworten