Russian Qt Forum

Qt => Общие вопросы => Тема начата: Trolltux от Ноябрь 06, 2005, 11:26



Название: Создание директории
Отправлено: 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 от Ноябрь 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 от Ноябрь 06, 2005, 19:42
Спасибо.