Russian Qt Forum

Qt => Общие вопросы => Тема начата: Waryable от Сентябрь 01, 2010, 10:02



Название: Монопольный доступ к файлу
Отправлено: Waryable от Сентябрь 01, 2010, 10:02
Всем привет. Собственно, вопрос вот в чем: есть ли в Qt возможность устанавливать монопольный режим работы с файлом? Я прошарил QFile и QIODevice. Ничего не нашел. С другой стороны нашел API-функцию:
Код:
HFILE OpenFile(
  LPCSTR lpFileName,
  LPOFSTRUCT lpReOpenBuff,
  UINT uStyle
);

Здесь последний параметр задает режим работы с открываемым файлом. При установке этого флага в значение OF_SHARE_DENY_READ функция открытия в режиме чтения этого же файла любыми другими процессами вернет ошибку. Это я в данный момент проверяю. Но все же хотелось бы выполнить то же самое средствами Qt или убедиться, что этой возможности там нет.

 


Название: Re: Монопольный доступ к файлу
Отправлено: kuzulis от Сентябрь 01, 2010, 10:27
нет, нету такого. Как вариант - сделайте сами дополнительный класс типа FileLocker
Код:
class FileLocker : public QObject
{
    Q_OBJECT
public:
    FileLocker(QObject *parent = 0);
    void setDescriptor(Qt::Handle descriptor);
    bool lock();
    bool unlock();
};

В ОС Windows и *.nix есть функции блокировки открытого файла по его дескриптору.
Win : http://msdn.microsoft.com/en-us/library/aa365202(VS.85).aspx
Posix: http://www.opennet.ru/man.shtml?topic=flock&category=2&russian=2

Ну также посмотри в сторону QFile::Permissions


Название: Re: Монопольный доступ к файлу
Отправлено: Sancho_s_rancho от Сентябрь 01, 2010, 12:45
http://doc.libqxt.org/0.6.0/qxtfilelock.html
Посмотрите.


Название: Re: Монопольный доступ к файлу
Отправлено: Denjs от Сентябрь 01, 2010, 12:58
а открыть файл на запись? нам конечно могут отказать от недостатка прав, но это самое простое решение кажется...


Название: Re: Монопольный доступ к файлу
Отправлено: Waryable от Сентябрь 01, 2010, 13:19
kuzulis, вот походу то, что нужно. Использую метод LockFileEx. Однако пока не понял как вытянуть нативный HANDLE из файлового потока QFile.

Sancho_s_rancho. Я так понимаю это чья-то сторонняя доработка библиотеки? Походу QxtFileLock просто Qt-обертка для LockFile/LockFileEx. Вообще я настроен обойтись теми инструментами, которые у меня уже есть. Желательно чисто Qt-классами.

Denjs, мне требуется, что бы кроме процесса, заблокировавшего файл ни один другой не смог даже открыть этот файл. Поэтому твое решение тут не подойдет.  :)


Название: Re: Монопольный доступ к файлу
Отправлено: Авварон от Сентябрь 01, 2010, 14:51
http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Utilities/qtlockedfile/ не?