Название: Занят ли файл??? Отправлено: Примерный ученик от Август 22, 2012, 09:29 Как узнать, занят ли файл каким либо процессом или к нему в данный момент никто не обращается (он закрыт). ???
Название: Re: Занят ли файл??? Отправлено: Пантер от Август 22, 2012, 09:35 Под виндой можно его попытаться удалить. :)
Название: Re: Занят ли файл??? Отправлено: Примерный ученик от Август 22, 2012, 09:40 Мне надо и под виндой и под линуксом точно знать: свободен или нет.
Под виндой открытый файл, который редактировался в блокноте, программа удалила нафиг >:( Название: Re: Занят ли файл??? Отправлено: maint от Август 22, 2012, 09:46 из простых способов, попробовать его открыть в эксклюзивном режиме. Иначе берем для линуха lsof, смотрим исходники. Под винду то же где то видел утилитку с исходниками, не вспомню правда где
Название: Re: Занят ли файл??? Отправлено: Примерный ученик от Август 22, 2012, 09:52 из простых способов, попробовать его открыть в эксклюзивном режиме. Иначе берем для линуха lsof, смотрим исходники. Под винду то же где то видел утилитку с исходниками, не вспомню правда где В эксклюзивном это как?Название: Re: Занят ли файл??? Отправлено: Bepec от Август 22, 2012, 10:09 Пытаемся открыть, получаем код ошибки. Смотрим в соответствии с OS.
PS ну или если совсем уж эксклюзивный вариант - написать платформозависимую функцию получения блокирующих дескрипторов :) Правда неуверен, что в linux они есть :D Название: Re: Занят ли файл??? Отправлено: xokc от Август 22, 2012, 10:12 В эксклюзивном это как? В Windows это с использованием флага OF_SHARE_DENY_NONE в функции OpenFile.Под виндой открытый файл, который редактировался в блокноте, программа удалила нафиг >:( В общем случае задача не имеет простого решения. Не буду говорить про блокнот - его логика работы с файлами мне не ведома. Но могу себе представить такое: программа открыла файл, считала его в память, закрыла. Пользователь в программе данные поизменял, нажал save - программа файл снова открыла, внесла изменения - закрыла. В промежутках между этими двумя моментами файл для ОС - совершенно свободен. Название: Re: Занят ли файл??? Отправлено: Igors от Август 22, 2012, 10:26 В общем случае задача не имеет простого решения. Не буду говорить про блокнот - его логика работы с файлами мне не ведома. Но могу себе представить такое: программа открыла файл, считала его в память, закрыла. Пользователь в программе данные поизменял, нажал save - программа файл снова открыла, внесла изменения - закрыла. В промежутках между этими двумя моментами файл для ОС - совершенно свободен. Ну так делают многие (Photoshop, TextEdit и др), но они никогда не сохранят без пользователя, он должен нажать Save (As), Так что это нормальноА почему не попытаться открыть по чтению И записи? Файл не меняется, а если кто-то др открыл по записи - ошибка. А если этот другой как-то хитро открыл - то его проблемы. Чем не простое решение? Название: Re: Занят ли файл??? Отправлено: Примерный ученик от Август 22, 2012, 10:49 Остановился на
Код: QFile fl(qApp->applicationDirPath()+"/test.txt"); Работает и в винде и по линуксом. Название: Re: Занят ли файл??? Отправлено: Пантер от Август 22, 2012, 10:51 Это с каких пор нельзя переименовывать открытый файл? Даже винда позволяет это делать. А вот переименование себя в себя и должно фэйлиться.
Название: Re: Занят ли файл??? Отправлено: Bepec от Август 22, 2012, 10:56 Насколько я знаю - переименовывается спокойно :) Вот только что переименовал :D
И никаких репрессий со стороны системы :) Название: Re: Занят ли файл??? Отправлено: Примерный ученик от Август 22, 2012, 11:02 Мне важно, что бы не было операций записи в файл.
Когда в файл идет запись - не дает переименовывать. Проверьте и убедитесь. Не точно сформулировал постановку задачи >:( Название: Re: Занят ли файл??? Отправлено: Пантер от Август 22, 2012, 11:08 Код: >>>$cat /dev/random > /var/tmp/1& Одна черепашка врет... Название: Re: Занят ли файл??? Отправлено: Странник от Август 22, 2012, 11:16 открывайте файл в монопольном режиме и не выпендривайтесь. для примера: Блокнот шарит, WordPad монополит.
Название: Re: Занят ли файл??? Отправлено: Примерный ученик от Август 24, 2012, 20:16 А как указать монопольный режим?
В QFile ничего подобного не нашел Название: Re: Занят ли файл??? Отправлено: Igors от Август 24, 2012, 20:23 А как указать монопольный режим? По-моему он по умолчанию и есть монопольный если открывать read+write. Знатоки поправят если не так :)В QFile ничего подобного не нашел |