fstream .open () Win32 - PullRequest
       20

fstream .open () Win32

1 голос
/ 28 марта 2012

Я пытаюсь понять это, и это долго мучает меня.

когда я печатаю:

inFile.open("C:\Users\Mark\Desktop\text.txt", ios::in | ios:: binary);

работает просто отлично. Но когда я делаю что-то подобное.

string garbage = "\\";</p> <pre><code> srcLoc = ofn.lpstrFile; // this is: C:\Users\Mark\Desktop\text.txt // This for loop inserts "\\" for(int i = 0; i < srcLoc.length(); i++) { switch(srcLoc[i]) { case '\\': srcLoc.insert(i, garbage); i++; break; } } // Now string srcLoc looks like: C:\\Users\Mark\\Desktop\\text.txt inFile.open(srcLoc.c_str(), ios::in | ios:: binary); // But it wont work if(inFile) { while(!inFile.eof()) { getline(inFile, tekst); SendMessage(hTextBox, EM_REPLACESEL, 0, (LPARAM)tekst.c_str()); SendMessage(hTextBox, EM_REPLACESEL, 0, (LPARAM)"\r\n"); } } else { MessageBox(0, srcLoc.c_str(), "Could not load", MB_ICONWARNING | MB_OK); } inFile.close();

Что я получаю, так это работает MessageBox "Не удалось загрузить" :) Кто-нибудь знает, что мне не хватает?

Ответы [ 2 ]

6 голосов
/ 28 марта 2012

Вам необходимо удвоить обратную косую черту, когда вы используете их в строке исходного кода. Компилятор преобразует каждую двойную обратную косую черту в вашем исходном коде в один исходный код в строке, используемой программой. Когда вы читаете строку, поступающую во время выполнения, вы не должны удвоить обратную косую черту.

1 голос
/ 28 марта 2012
// Now string srcLoc looks like: C:\\Users\Mark\\Desktop\\text.txt

Это , а не , как должна выглядеть строка в отладчике (или где-либо еще во время выполнения). Это только способ представления строки с обратной косой чертой в исходном коде.

Ваш цикл, пытающийся добавить дополнительные '\', также не работает, потому что компилятор удалит одиночные обратные слэши и заменит их значением, соответствующим escape-последовательности, если таковая имеется. Например, последовательность '\t' заменяется символом табуляции.

Вы можете решить ваши проблемы, используя вместо этого альтернативный разделитель

"C:/Users/Mark/Desktop/text.txt"

это работает и для Windows, а не только для Linux.

...