Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Probleme aus einem Backslash in einem String 2 zu machen

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 <
000
08.06.2004, 15:11 Uhr
ScheidR



Hallo!

Ich habe einen Pfad in einem String in diesem Stil:
Cordner1\ordner1\datei

und benötige aber
C\ordner1\\ordner2\\daetei

da die funktion fürs speichern es nur so nimmt.....

jetzt wollt ich mit

C++:
string.Replace("\", "\\")   //wird nicht kompiliert....


zwei daraus machen aber da ja Backlsash irgendein besonderes zeichen is geht es nur so:

C++:
string.Replace("\\", "\\\\"); //wird kompiliert .... funktioniert aber nicht...


Wie gehts das? Ich hab keine ahnung mehr was ich noch probieren soll.....

Hoffe Ihr könnt mir helfen!
Danke im Voraus!
LG, Ronny
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.06.2004, 15:19 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


öhm... was ist string? ein std::string oder ein CString...

und wenn du in deinem string bereits ein \ drin hast musst du den nicht durch einen doppelten ersetzen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.06.2004, 15:40 Uhr
ao

(Operator)



Zitat:
ScheidR postete
... benötige aber
C\ordner1\\ordner2\\daetei
da die funktion fürs speichern es nur so nimmt.....

Wahrscheinlich hast du was missverstanden. Nur, wenn du den Pfad explizit im C-Quellcode hinschreibst (sog. Stringliteral), musst du den doppelten Backslash angeben. Bereits beim Übersetzen ersetzt der Compiler "\\" durch "\", so dass zur Laufzeit nirgendwo "\\" im Speicher vorkommt. Was du da vorhast, ist unnötig.

Wenn die Funktion zum Speichern Probleme macht, liegts wahrscheinlich nicht daran. Zeig doch mal den Code.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.06.2004, 16:51 Uhr
ScheidR



Hallo und Danke für eure Antworten!!

Es ist ein CString....
Hmmm.... verstehe wenn im String ein \ steht ist es ja eigentlich eh schon ein \\.......oder....... aber weiter komm ich jetzt trotzdem nicht.....


Die Funktion sieht so aus:

C++:
void CBasicappDoc::OnAcquire()
{    
    DIO_file_t filetype;
    filetype = DIO_tiff;



    //Liest die ini Datei ein (aus C:\\WINNT)
    m_IniReader.setINIFileName(datei);

    // ? notwendig? geht auch ohne......
    strPfad.Empty();    

    //gibt der Membervariable m_tissuepfad den Wert aus dem Key Pfad
    strPfad = m_IniReader.getKeyValue("ImgPath",section);

    //gibt der Membervariable m_tissuebild den Wert aus dem Key Name
    strBName= m_IniReader.getKeyValue("SampleID",section);

    strKanal= m_IniReader.getKeyValue("Channels", section);


    ikanal = atoi(strKanal);  // Kanal in int aus INI

    strFace.Format("%d", iface);  // int in String konvert von Gesichtsfeld
    strChannel.Format("%d", ikanalzaehler);  //int in String konvert von Channel

    ilaenge = strBName.GetLength();  //länge des Strings
    strBName.Insert(ilaenge, binder); // Fügt den Bindestrich zum Bildnamen

    ilaenge = strBName.GetLength();  //länge des Strings
    strBName.Insert(ilaenge, strFace); // Fügt das Gesichtsfeld hinzu

    ilaenge = strBName.GetLength();  //länge des Strings
    strBName.Insert(ilaenge, strChannel); // Fügt den Channel hinzu


    // ??? \ gegen \\ austauschen????
    int n = strPfad.Replace("\\", "\\\\");


    ilaenge = strPfad.GetLength();     // länges des Strings von Pfad
    strPfad.Insert(ilaenge, strBName); // fügt den Namen dem Pfad hinzu


    // strPfad sollte jetzt den erzeugten Bildamen inkl. Pfad enthalten
    // un dieser Funktion zum speichern mitgeben!
    int rv = DIO_export(strPfad, GetImage(), NULL, filetype,
            TRUE, NULL, NULL);  // Speicher Routine von in-situ



    if (ikanalzaehler < ikanal)  // wenn noch nicht alle kanäle gespeichert
    ikanalzaehler++;  // kanal hinauf zählen
    else  //wenn letzer channel erreicht face um 1 erhöhen...
    {
        iface++;  
        ikanalzaehler = 1;  // und kanal auf 1 setzen
    }

}


und es passiert nichts aber wenn ich strPfad einen Pfad mit 2 Backslash "C\testpfad\\..." hinschreibe funkzt es.....

????? ????
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.06.2004, 17:03 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


im string selber steht nur ein backslash... nur wenn du ihm dieses als literal übergeben willst musst du zweimal einen backslash angeben weil er einen backslash versucht als escapesequenz zu interpretieren...


ach so und zum konkantenieren und setzen eines CStrings ist es ganz intuitiv einach = und += zu verwenden...


C++:
CString test, a;
a="Linux";
test=a;
a=+" ist doof";


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 08.06.2004 um 17:03 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
08.06.2004, 17:20 Uhr
ScheidR



Das habe ich ja gemacht aber es geht nicht!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
08.06.2004, 17:21 Uhr
ScheidR



Danke für die =+ Funktion das geht ja um einiges schöner so!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
08.06.2004, 20:39 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


öhm ist die frage jetzt beantwortet oder besteht das problem noch?
wenn ja was genau fehlt noch?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
09.06.2004, 08:36 Uhr
ScheidR



Das problem besteht noch......
Ich habe ja wie man in dem Source Code oben sieht eh zwei ein \ vor dem eigentlichen \ gesetzt.... aber es geht nicht....
????????????
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
09.06.2004, 08:49 Uhr
ScheidR



Aaaaahhhhh!!!!!!!!

Bin grad drauf gekommen!!

Ich habe zu dem Pfad:
Ctestpfad
den Bildnamen: bild1.tif
hinzugefügt:
Das ergibt dann:
Ctestpfadbild1.tif..........

kann natürlich ned gehen!!!!

jetz hab i vorher noch ein \ hinzugefügt und es läuft wie geschmiert!!!!!

Ahh bin sooo glücklich!! Danke nochmal allen die geholfen haben!!!!!

LG, Ronny
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


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: