путь Linux в fstream

#c #linux #file-io

#c #linux #file-io

Вопрос:

я пытаюсь создать новый файл и сохранить его в подкаталоге текущей папки в LINUX

путь (преобразование) должен выглядеть примерно как markus/123456, где markus — это (существующий) подкаталог, а 123456 — несуществующий файл

странная вещь: это работает, когда я не использую подкаталог, чтобы сказать это коротко:

«123456» работает и создает файл в текущем каталоге

«markus / 123456» не работает и вообще ничего не делает…

 ofstream handle;
string convert = "1234";
convert=name  "/"  convert;
cout << convert<< endl;
handle.open(convert.c_str(),ios::out); // dont works with subdirectory in string
handle<<message;
handle.close();
  

ОБРАТИТЕ ВНИМАНИЕ: я использую Linux, а не Windows. Мне нужно решение для Linux (3.0.0-12-generic-pae).

РЕДАКТИРОВАТЬ: Спасибо за одно из замечаний, я обнаружил, что это, вероятно, правильная проблема. Я публикую код, как я создал папку:

 user::user(string aaa)
{
    name=aaa;
    mkdir(name.c_str(),0600);

}
  

ОБРАТИТЕ ВНИМАНИЕ: я также пробовал это с 0666 без успеха. Все еще не знаю, как это сделать правильно

Комментарии:

1. Какой результат он выдает? Какую ошибку вы получаете?

2. Пожалуйста, сократите вашу программу до минимального, полного, компилируемого примера программы. В процессе вы вполне можете обнаружить проблему самостоятельно. Если вы этого не сделаете, полная программа позволит нам найти проблему намного быстрее. См . sscce.org для получения дополнительной информации.

3. он не выдает никаких выходных данных на терминале. ofstream просто не открывается. Если я использую handle.isopen(); после того, как он скажет «нет». если я не использую путь, он просто проходит успешно

4. Так что это должно сработать. Это говорит о том, что вы либо неправильно пишете его, либо запускаете его из неправильного каталога (поскольку путь будет относительным к текущему рабочему каталогу (при условии, что первый символ не является ‘/’)), либо у вас нет разрешения на запись в каталог. Вы проверили текущий рабочий каталог? Попробуйте getcwd() посмотреть, что он выводит.

5. спасибо за подсказку! Это правильная проблема. Я удалил каталог и создал его вручную. После этого я смог писать. mkdir(name.c_str(),0600); это команда, с помощью которой каталог был создан ранее. name является частью класса и такой же, как в моем предыдущем примере. Также часть не может отличаться, потому что я создаю каталог и файл (в примере «123456») в одном каталоге.

Ответ №1:

 mkdir(name.c_str(),0600);
  

Это неправильно. Попробуйте

 mkdir(name.c_str(), 0700);