Russian Qt Forum
Май 05, 2024, 01:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание директории  (Прочитано 6824 раз)
Trolltux
Гость
« : Ноябрь 06, 2005, 11:26 »

Все мои программы хранят настройки в папке ~/.qsoft.
Пишу функцию, поверяющую есть ли папка и файл конфигурации. Если их нет, то она создает их:

Объявление полей класса:
Код:

QDir dirconf;
QFile filedata;


Описание метода класса:
Код:

dirconf.setPath( QString("%1/.qsoft").arg(getenv("HOME")) );
filedata.setFileName( QString("%1/qnote.dat").arg(dirconf.path()) );

if (!dirconf.exists()){
printf("\n%s: directory not exist.\nBegin creating directory...\n", dirconf.path().toAscii().constData());
if ( !dirconf.mkpath( dirconf.dirName() ) ){
printf("Error: directory not created.\n");
exit(1);
} else
printf("OK: directory created.\n");
}

if (!filedata.exists()){
printf("\n%s: file not exist.\nBegin creating file...\n", filedata.fileName().toAscii().constData());
if ( !filedata.open(QIODevice::WriteOnly) ){
printf("Error: file not created.\n");
exit(1);
} else {
filedata.close();
printf("OK: file created.\n");
}
}


Сам класс приводить не буду. В результате создается папка ~/.qsoft, ~/.qsoft/.qsoft и файл ~/.qsoft/qnote.dat

Я не понимаю, почему создается ~/.qsoft/.qsoft.
В документации сказано что mkPath создаст папку, путь к которой указан в параметре и все родительские директории, если они отсутствуют.

При запуске программы в консоли появляется вот что:

Код:

/home/were/.qsoft: directory not exist.
Begin creating directory...
OK: directory created.

/home/were/.qsoft/qnote.dat: file not exist.
Begin creating file...
OK: file created.


То есть программа пытается создать /home/were/.qsoft, но почему-то она создает /home/were/.qsoft/.qsoft, а /home/were/.qsoft создается как родительская.

Кто-нибудь, подскажите как сделать грамотно. Хочу правильный и красивый код... Да вот что-то не выходит.
Записан
Sergeich
Гость
« Ответ #1 : Ноябрь 06, 2005, 12:26 »

Ну и че ты хотел?
В строчке
Код:

      if ( !dirconf.mkpath( dirconf.dirName() ) ){

 значение dirconf равно /home/were/.qsoft, а dirconf.dirName() - .qsoft,
поэтому QDir создает каталог .qsoft в каталоге /home/were/.qsoft
Кстати вместо
Код:

   dirconf.setPath( QString("%1/.qsoft").arg(getenv("HOME")) );

юзай
Код:

  dirconf.setPath( QString("%1/.qconf").arg( QDir::homePath() ) );

 тогда не будет проблем с переносимостью.
Записан
Trolltux
Гость
« Ответ #2 : Ноябрь 06, 2005, 19:42 »

Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.081 секунд. Запросов: 20.