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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Занят ли файл???  (Прочитано 7877 раз)
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« : Август 22, 2012, 09:29 »

Как узнать, занят ли файл каким либо процессом или к нему в данный момент никто не обращается (он закрыт). Непонимающий
Записан

Как мало времени и как много нужно узнать
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Август 22, 2012, 09:35 »

Под виндой можно его попытаться удалить. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #2 : Август 22, 2012, 09:40 »

Мне надо и под виндой и под линуксом точно знать: свободен или нет.
Под виндой открытый файл, который редактировался в блокноте, программа удалила нафиг Злой
Записан

Как мало времени и как много нужно узнать
maint
Гость
« Ответ #3 : Август 22, 2012, 09:46 »

из простых способов, попробовать его открыть в эксклюзивном режиме. Иначе берем для линуха lsof, смотрим исходники. Под винду то же где то видел утилитку с исходниками, не вспомню правда где
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #4 : Август 22, 2012, 09:52 »

из простых способов, попробовать его открыть в эксклюзивном режиме. Иначе берем для линуха lsof, смотрим исходники. Под винду то же где то видел утилитку с исходниками, не вспомню правда где
В эксклюзивном это как?
Записан

Как мало времени и как много нужно узнать
Bepec
Гость
« Ответ #5 : Август 22, 2012, 10:09 »

Пытаемся открыть, получаем код ошибки. Смотрим в соответствии с OS.

PS ну или если совсем уж эксклюзивный вариант - написать платформозависимую функцию получения блокирующих дескрипторов Улыбающийся Правда неуверен, что в linux они есть Веселый
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #6 : Август 22, 2012, 10:12 »

В эксклюзивном это как?
В Windows это с использованием флага OF_SHARE_DENY_NONE в функции OpenFile.

Под виндой открытый файл, который редактировался в блокноте, программа удалила нафиг Злой
В общем случае задача не имеет простого решения. Не буду говорить про блокнот - его логика работы с файлами мне не ведома. Но могу себе представить такое: программа открыла файл, считала его в память, закрыла. Пользователь в программе данные поизменял, нажал save - программа файл снова открыла, внесла изменения - закрыла. В промежутках между этими двумя моментами файл для ОС - совершенно свободен.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Август 22, 2012, 10:26 »

В общем случае задача не имеет простого решения. Не буду говорить про блокнот - его логика работы с файлами мне не ведома. Но могу себе представить такое: программа открыла файл, считала его в память, закрыла. Пользователь в программе данные поизменял, нажал save - программа файл снова открыла, внесла изменения - закрыла. В промежутках между этими двумя моментами файл для ОС - совершенно свободен.
Ну так делают многие (Photoshop, TextEdit и др), но они никогда не сохранят без пользователя, он должен нажать Save (As), Так что это нормально

А почему не попытаться открыть по чтению И записи? Файл не меняется, а если кто-то др открыл по записи - ошибка. А если этот другой как-то хитро открыл - то его проблемы. Чем не простое решение?
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #8 : Август 22, 2012, 10:49 »

Остановился на
Код:
        QFile fl(qApp->applicationDirPath()+"/test.txt");
        QDir wokerDirU(qApp->applicationDirPath());
bool free=wokerDirU.rename(fl.name(),fl.name());
if (free)// файл не занят
       {
       }
Если файл используется - переименовывать не дает.
Работает и в винде и по линуксом.
Записан

Как мало времени и как много нужно узнать
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Август 22, 2012, 10:51 »

Это с каких пор нельзя переименовывать открытый файл? Даже винда позволяет это делать. А вот переименование себя в себя и должно фэйлиться.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
« Ответ #10 : Август 22, 2012, 10:56 »

Насколько я знаю - переименовывается спокойно Улыбающийся Вот только что переименовал Веселый
И никаких репрессий со стороны системы Улыбающийся
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #11 : Август 22, 2012, 11:02 »

Мне важно, что бы не было операций записи в файл.
Когда в файл идет запись - не дает переименовывать.
Проверьте и убедитесь.
Не точно сформулировал постановку задачи Злой
Записан

Как мало времени и как много нужно узнать
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #12 : Август 22, 2012, 11:08 »

Код:
>>>$cat /dev/random > /var/tmp/1&
>>>$ls /var/tmp/
/var/tmp/1
>>>$mv /var/tmp/1 /var/tmp/2
>>>$ls /var/tmp/
/var/tmp/2

Одна черепашка врет...
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Странник
Гость
« Ответ #13 : Август 22, 2012, 11:16 »

открывайте файл в монопольном режиме и не выпендривайтесь. для примера: Блокнот шарит, WordPad монополит.
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #14 : Август 24, 2012, 20:16 »

А как указать монопольный режим?
В QFile ничего подобного не нашел
Записан

Как мало времени и как много нужно узнать
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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