Russian Qt Forum
Ноябрь 27, 2024, 10:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Монопольный доступ к файлу  (Прочитано 7672 раз)
Waryable
Гость
« : Сентябрь 01, 2010, 10:02 »

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

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

 
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Сентябрь 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
Записан

ArchLinux x86_64 / Win10 64 bit
Sancho_s_rancho
Гость
« Ответ #2 : Сентябрь 01, 2010, 12:45 »

http://doc.libqxt.org/0.6.0/qxtfilelock.html
Посмотрите.
Записан
Denjs
Гость
« Ответ #3 : Сентябрь 01, 2010, 12:58 »

а открыть файл на запись? нам конечно могут отказать от недостатка прав, но это самое простое решение кажется...
Записан
Waryable
Гость
« Ответ #4 : Сентябрь 01, 2010, 13:19 »

kuzulis, вот походу то, что нужно. Использую метод LockFileEx. Однако пока не понял как вытянуть нативный HANDLE из файлового потока QFile.

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

Denjs, мне требуется, что бы кроме процесса, заблокировавшего файл ни один другой не смог даже открыть этот файл. Поэтому твое решение тут не подойдет.  Улыбающийся
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #5 : Сентябрь 01, 2010, 14:51 »

http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Utilities/qtlockedfile/ не?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.093 секунд. Запросов: 23.