#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);