2014-10-21 2 views
1

C++ У меня есть этот код в C++:Чтение строки из файла не работает

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main(){ 
    string str; 
    ifstream file("file.txt"); 
    file >> str; 
    cout << str; 
    return 0; 
} 

У меня есть file.txt в том же каталоге, main.cpp. Я не получаю никакого результата из этого, я пробовал указать полный путь к файлу и не получил результата и попробовал его на нескольких разных машинах. Кто-нибудь знает, что я делаю неправильно?

+2

'file.txt' должен находиться в рабочем каталоге. –

+0

какая ОС вы используете? Это относится к тому, как вам нужно писать полный путь. – Ivan

+0

@MariusBancila. Я попробовал «~/cpp/filetest/file.txt», что должно быть хорошо? Если нет, куда я должен положить этот файл? – akalikin

ответ

2

Что вам нужно, так это current working directory для вашей программы, то есть где ваш текстовый файл должен быть, если вы не квалифицируете его полным или относительным путем.

Вы можете получить его во время работы с getcwd (linux) или _getcwd (windows).

Редактировать: Я согласен с Энди, вы должны в любом случае проверить наличие ошибок при открытии файлов. Вы могли бы поймать это раньше (т. Е. файл не найден), например.

(псевдокод вперед для иллюстративных целей)

#include <unistd.h> 

// Warning: linux-only, use #ifdefs and _getcwd for windows OS 
std::string get_working_path() { 
    char cwd[1024]; 
    if (getcwd(cwd, sizeof(cwd)) != NULL) 
     return std::string(cwd); 
    else 
     return std::string(""); 
} 

int main() { 
    std::string str; 
    std::ifstream file("file.txt"); 
    if (file >> str) 
     std::cout << str; 
    else { 
     std::cout << "File not found in cwd: " << get_working_path(); 
     // abort 
    } 
    // ... 
} 
+2

Чтобы скомпоновать, OP * должен * проверить наличие открытого файла. Это, скорее всего, намекнуло бы, что возникла проблема с этим путем: 'ifstream file (" file.txt "); if (file >> str) {cout << str;} else cout <<" Bad path \ n ";' – AndyG

+2

Люди, которые задают вопрос iostreams о stackoverflow ** никогда ** есть ошибки в их коде.Это удручает.У их учителей нужно ударить большими палками. –

+2

Это замечательно. Немногие ответы на эти вопросы о SO обеспечивают код что _ показывает_ OP, каков текущий рабочий каталог (и, следовательно, что они недопонимают). –

Смежные вопросы