2016-03-15 4 views
2

Открывает ли fstream() относительные или абсолютные пути к файлу? Вот пример кода -Относительный путь в fstream open() Mac OS X не работает

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

using namespace std; 


int main() { 
    fstream myfile; 

    myfile.open("subd/example.txt"); 
    if(myfile.is_open()) { 
      for(int i = 0; i < 10; i++) { 
        myfile << "Example data " << i << endl; 
      } 
    } else cout << "Unable to open " << endl; 
    myfile.close(); 
    return 0; 
} 

Я работаю над средой MAC OS X. Этот подкаталог уже существует. .open() возвращает false для каждого из этих случаев. Я также использую -std = C++ 11. Как мне обойти эту проблему? Разрешения для «» SUBD каталога являются:

enter image description here

Выход всегда «Невозможно открыть». Решение оригинального сообщения (одно сообщение, отмеченное дубликатом) не решает мою проблему.

решение, потому что ни один из ответов ниже полностью не решить мою проблему

Используйте ofstream с относительным путем (по отношению к месту исполняемыми то есть. ARGV [ 0]). fstream, похоже, не работает таким же образом.

+1

Он принимает любой путь, который вы ему даете. Путь, начинающийся с «/», является абсолютным, все остальные пути относительны (к текущему рабочему каталогу). – molbdnilo

+0

Пример 2 является фиктивным. Это «subdirectory/example.txt». Остальные должны работать. У вас либо отсутствует разрешение + r в одном из задействованных каталогов, либо вы просто сделали опечатку. – kamikaze

+0

Я добавил более ясный пример. Нужны ли другим пользователям также доступ на запись? –

ответ

0

Открывает ли fstream открытые() относительные или абсолютные пути к файлу?

Да.

И если относительный, то это относится к вызывающей среде current working directory.

Обратите внимание, что это не может быть местоположение вашего исходного кода на диске.

+0

Это не работает, когда я устанавливаю абсолютный путь. (от корня до подкаталога). Я имею в виду, почему нужно знать рабочий каталог вызывающей среды? И если текущий рабочий каталог связан с argv [0], то это тоже не работает в моем случае. Как "./subd/example.txt" –

+0

@KartikYadav: 'subd/example.txt' Это не абсолютный путь. –

+0

Я знаю. Но что-то вроде этого «/home/kartik/Downloads/P4/subd/example.txt» или «~/Downloads/P4/subd/example.txt» также не работает. Значение is_open() по-прежнему ложно. –

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