Название: QFile setFileName QDir::setCurrent Отправлено: SABROG от Декабрь 26, 2009, 22:41 У меня есть список с указателями на QFile, изначально экземпляры создаются как new QFile(), т.е. в конструктор ничего не передается. А потом я уже через метод QFile::setFileName() ставлю имена файлам. Делается это для того, чтобы мне не мешались пути к файлам, которых еще не существует, т.е. пользователь эти пути выберет позже. Так вот таким образом я сохраняю файлы:
Код: QDir dir(path); При этом все эти файлы создают в папке с программой (.exe файлом), какую бы я ни установил текущую директорию. Документация к методу QFile::setFileName() говорит следующее: Цитировать If the file name has no path or a relative path, the path used will be the application's current directory path at the time of the open() call. При этом приводится пример: Код: QFile file; Так все-таки какой путь испольуется: current directory или application's current directory ? Судя по тому, что у меня ничего не выходит используется application's current directory, значит ошибка в документации и пример троллей не работает. Или ошибка в Qt? Название: Re: QFile setFileName QDir::setCurrent Отправлено: Dendy от Декабрь 26, 2009, 22:49 Это одно и то же. Вообще менять текущую директорию - моветон, делайте так только если точно знаете чего хотите, в данном случае это не нужно. Представьте что разные модули в программе будут параллельно менять директорию туда-сюда, в итоге файлы будут читаться/писаться куда попало.
Выведите в лог file.fileName(), чтобы убедиться, что путь относительный. Вообще правильно пользоваться перед открытием: file.setFileName( dir.filePath( fileName ) ), а не QDir::setCurrent( dir ) + file.setFileName( fileName ). Название: Re: QFile setFileName QDir::setCurrent Отправлено: SABROG от Декабрь 26, 2009, 22:57 У меня изначально в классе членом был обычный QString fileName, я потом заменил его на указатель QFile. Пришлось еще сюда приплести QSharedPointer, чтобы класс мог без проблем копироваться в контейнер. Думал с указателем на QFile будет больше возможности развернуться. Значит теперь обратно придется все менять на QString.
Я так попробовал, это работает. Код: QString fileName = file.fileName(); Но это опять же моветон, гонять имя файла туда сюда. А тем временем косяк остается косяком. QDir::current() показывает ту директорию, которую я выбирал для сохранения файла, однако же файлы упорно сохраняются в папку с программой. Мне нужно подтверждение этого бага и я смогу отправить багрепорт троллям. Название: Re: QFile setFileName QDir::setCurrent Отправлено: Dendy от Декабрь 26, 2009, 23:08 Гонять имена файлов туда-сюда - единственно верное решение.
Название: Re: QFile setFileName QDir::setCurrent Отправлено: SABROG от Декабрь 26, 2009, 23:16 Гонять имена файлов туда-сюда - единственно верное решение. В общем я уже сделал обратный рефакторинг класса. Всё работает. Меня сейчас интересует документация, раз тролли говорят, что при отсутствии пути в имени файла должна использоваться текущая директория, то почему она не используется. Название: Re: QFile setFileName QDir::setCurrent Отправлено: Igors от Декабрь 26, 2009, 23:21 Я не смог получить полное имя от QFile, но его можно взять через QFileInfo
|