Russian Qt Forum

Qt => Вопросы новичков => Тема начата: makar182 от Август 21, 2014, 22:16



Название: Создание файла
Отправлено: makar182 от Август 21, 2014, 22:16
Доброго времени суток,

При открытии (в данном случае создании) файла и работы с ним, файл не появляется по указанному в описании пути, но он появляется в C:Пользователи/Пользователь/AppData/Local/VirtualStore. Почему так происходит и как заставить его появляется в указанной директории?

Код:
#include <QCoreApplication>
#include <QDebug>
#include <QFile>
#include <QFileInfo>
#include <QString>

void Write(QString fileName)
{
    QFile mFile(fileName);

     if (!mFile.open(QFile::WriteOnly | QFile::Text))
     {
         qDebug() << "Could not open the file!";
         return;
     }

     QTextStream out(&mFile);
     out << "Hello world!";
     mFile.flush();
     mFile.close();

}

void Read(QString fileName)
{
    QFile mFile(fileName);

     if (!mFile.open(QFile::ReadOnly | QFile::Text))
     {
         qDebug() << "Could not open the file!";
         return;
     }

     QTextStream in(&mFile);
     QString mText = in.readAll();
     qDebug() << mText;

     mFile.close();
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString mFileName = "C:/myfile.txt";

    Write(mFileName);
    Read(mFileName);

    return a.exec();
}


Название: Re: Создание файла
Отправлено: Bepec от Август 21, 2014, 22:17
Права Права.


Название: Re: Создание файла
Отправлено: makar182 от Август 21, 2014, 22:24
Права Права.

Можно по-подробнее? Это уже, кстати, на Windows 8.


Название: Re: Создание файла
Отправлено: Bepec от Август 21, 2014, 22:36
Тогда ничем не помогу. Я её боюсь как чёрт ладана :)

PS я лично искал как её выключить нормально минут 40 :) Пришлось лезть с другого компа в инет и там найти таки способ :D


Название: Re: Создание файла
Отправлено: Alex Custov от Август 21, 2014, 22:43
пользователь, из-под которого работает программа, не имеет прав записи в каталог. Если это системный каталог, что включается механизм Virtual Store, и поэтому файл появляется именно там где он появляется, а не в C:\. Решение - запуск от админа или временное повышение привилегий с помощью UAC.


Название: Re: Создание файла
Отправлено: makar182 от Август 21, 2014, 22:52
пользователь, из-под которого работает программа, не имеет прав записи в каталог. Если это системный каталог, что включается механизм Virtual Store, и поэтому файл появляется именно там где он появляется, а не в C:\. Решение - запуск от админа или временное повышение привилегий с помощью UAC.

А как запустить Qt от администратора на Windows 8? Что-то я туплю уже на ночь глядя ;D


Название: Re: Создание файла
Отправлено: Alex Custov от Август 21, 2014, 23:02
А как запустить Qt от администратора на Windows 8? Что-то я туплю уже на ночь глядя ;D

Qt - это DLL библиотека, её нельзя запустить. Запускается от админа твой конкретный exe, обычно через правую кнопку в экплорере и там "Run as administrator".


Название: Re: Создание файла
Отправлено: kambala от Август 21, 2014, 23:23
PS я лично искал как её выключить нормально минут 40 :) Пришлось лезть с другого компа в инет и там найти таки способ :D
альт+ф4. второй фейспалм за день.


Название: Re: Создание файла
Отправлено: Bepec от Август 21, 2014, 23:33
Ничего подобного :) Нулевая реакция в декстопном режиме :)

PS это было на заре её появления :) Ноутбук принесли.


Название: Re: Создание файла
Отправлено: vizir.vs от Август 22, 2014, 11:35
похожая хрень и в Windows 7 есть (создание файла в Virtual Store).


Название: Re: Создание файла
Отправлено: Fregloin от Август 24, 2014, 09:08
сам сталкивался с этой ботвой. Решается отключением защиты данных для диска в свойствах моего компа.


Название: Re: Создание файла
Отправлено: 8Observer8 от Август 26, 2014, 13:20
makar182, может вам будет полезен в будущем мой пример. Такой подход позволяет контролировать ошибки однообразно и работать с функциями чтения\записи вот так:
Код
C++ (Qt)
int main( )
{
   // Read data from the input file
   QString fileNameIn = "input.txt";
   QString content;
 
   try {
       readData( fileNameIn, content );
   } catch ( const LogicError &e ) {
       std::cerr << e.what( ) << std::endl;
       return 1;
   } catch ( const FileError &e) {
       std::cerr << e.what( ) << std::endl;
       return 1;
   } catch ( ... ) {
       std::cerr << "Error: unknown exception" << std::endl;
       return 1;
   }
 
   // Parse the content to the integer array
   std::vector<int> arr;
   try {
       parseToIntArray( content, arr );
   } catch ( const LogicError &e ) {
       std::cerr << e.what( ) << std::endl;
       return 1;
   } catch ( ... ) {
       std::cerr << "Error: unknown exception" << std::endl;
       return 1;
   }
 
   // Write data to the output file
   QString fileNameOut = "output.txt";
   try {
       writeData( fileNameOut, arr );
   } catch ( const LogicError &e ) {
       std::cerr << e.what( ) << std::endl;
       return 1;
   } catch ( const FileError &e ) {
       std::cerr << e.what( ) << std::endl;
       return 1;
   } catch ( ... ) {
       std::cerr << "Error: unknown exception" << std::endl;
       return 1;
   }
 
   return 0;
}

Код самого примера: https://github.com/8Observer8/Qt_TextFile/blob/master/main.cpp