2015-04-04 3 views
0

Я знаю, что это похоже на простой вопрос, но я испробовал все, что я мог придумать, чтобы не иметь ничего общего с чем-то, что не должно было быть проблемой в первую очередь.Не удается открыть файл с относительным путем? (C++ ifstream)

Это небольшая программа на C++, которая открывает файл. Когда я открываю его с его абсолютным файловым путем, он отлично работает. Однако с относительным путем он перестает работать.

Вот путь к файлу программы и файлы я пытаюсь прочитать:

C++ программе:"/Users/Baggio/C++/Lab0/Lab0/Lab0/main.cpp"

Files:/Users/Baggio/C++/Lab0/Lab0/Lab0/result.txt, /Users/Baggio/C++/Lab0/Lab0/Lab0/dict.txt

Вот код фрагмент:

#include <iostream> 
#include <fstream> 
#include <iomanip> 
#include <string> 
#include <cstdlib> 
using namespace std; 

int main(int argc, const char * argv[]) { 

// string dict_filename = "/Users/Baggio/C++/Lab0/Lab0/Lab0/dict.txt"; 
// string result_filename = "/Users/Baggio/C++/Lab0/Lab0/Lab0/result.txt"; 

    string dict_filename_string = "dict.txt"; 
    string result_filename_string = "result.txt"; 

    const char* dict_filename = dict_filename_string.c_str(); 
    const char* result_filename = result_filename_string.c_str(); 

    // open files 
    ifstream dict_file(dict_filename, ifstream::in); 
    ifstream result_file(result_filename, ifstream::in); 

    if (!dict_file || !result_file) { 
     cerr << "File could not be opened." << endl; 
     exit(1); 
    } 
} 

Результат выполнения

File could not be opened. 

Я уверен, что я сделал все включает правильные и типы данных, право на аргументы ifstream конструктора. Единственное, о чем я могу думать, стоит упомянуть о системе, в которой я включен: Я нахожусь на Mac, и я использую XCode6 в качестве моей IDE.

Кроме того, я пытался переместить местоположение файлы (results.txt и dict.txt) в этих местах без толку:

/Users/Baggio/C++/Lab0/Lab0/Lab0/ 

/Users/Baggio/C++/Lab0/Lab0/ 

/Users/Baggio/C++/Lab0/ 

/Users/Baggio/C++/ 

Спасибо за вашу помощь, ребята !! Любые предложения или мысли оценены.

+0

Да, это так! Typo bad error ... -__- " –

+0

Я бы добавил тег xcode, так как я думаю, что может быть проблема: путь, в котором выполняется программа, может не совпадать с местоположением исходного файла. строка пути к файлу будет похожа на «./dict.txt». – Dronz

+0

Yup добавил - я также пробовал это, но это не сработало. –

ответ

2

Распечатайте текущую рабочую директорию при запуске программы:

char buffer[256]; 
char *val = getcwd(buffer, sizeof(buffer)); 
if (val) { 
    std::cout << buffer << std::endl; 
} 

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

Если вы хотите сделать путь относительно местоположения двоичного кода, вам придется сделать это самостоятельно. Многие языки программирования предлагают это как вариант, но он не встроен в C++. Вы можете сделать это, найдя исполняемый файл, используя argv[0] от main. Затем вам нужно отбросить компонент файла исполняемого пути и заменить его на имя файла, которое вас интересует.

+0

Я вижу - так вот в чем проблема: напечатано '/ Users/Baggio/C++/Lab0/Lab0/Lab0/Lab0/Build/Products/Debug' - похоже на то, что проблема, связанная с XCode.Я теперь исследую, как изменить это в XCode. Спасибо за предложение! –

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