Russian Qt Forum

Qt => Общие вопросы => Тема начата: __Heaven__ от Июль 23, 2015, 17:17



Название: QFile::isOpen() == true, но файл не создаётся
Отправлено: __Heaven__ от Июль 23, 2015, 17:17
Привет друзья!
Писал одну утилитку под себя и наткнулся на такую вещь:
Код
C++ (Qt)
QFile file("C:\\file.txt");
file.open(QFile::WriteOnly);
if (file.isOpen())         // true
   ...

Оказалось, что у меня на работе доступ к диску C: закрыт. Почему же isOpen выдаёт true?


Название: Re: QFile::isOpen() == true, но файл не создаётся
Отправлено: BuRn от Июль 23, 2015, 17:49
Привет друзья!
Писал одну утилитку под себя и наткнулся на такую вещь:
Код
C++ (Qt)
QFile file("C:\\file.txt");
file.open(QFile::WriteOnly);
if (file.isOpen())         // true
   ...

Оказалось, что у меня на работе доступ к диску C: закрыт. Почему же isOpen выдаёт true?
Винда умнее чем кажется, ты даже если начнешь сохранять на диск С она тебе выдаст все ок, но файла не будет. Все просто, у нее какая-то виртуальная директория есть, куда он складирует файлы. Почитайте это: http://delphimaster.net/view/15-1277274062, я думаю вам поможет


Название: Re: QFile::isOpen() == true, но файл не создаётся
Отправлено: Alex Custov от Июль 23, 2015, 17:53
Добавлю, что этот virtual storage сделан для совместимости с предыдущими говноверсиями винды.


Название: Re: QFile::isOpen() == true, но файл не создаётся
Отправлено: __Heaven__ от Июль 23, 2015, 18:30
Действительно, умно)))
Спасибо!


Название: Re: QFile::isOpen() == true, но файл не создаётся
Отправлено: LisandreL от Июль 24, 2015, 08:56
Вам нужен манифест с установленным requestedExecutionLevel.
http://stackoverflow.com/questions/4730053/how-to-disable-virtualstore-for-c-programs