Название: Доступ к одному файлу из разных программ Отправлено: ApexUFO от Май 18, 2017, 10:30 Добрый день!
В программе в файл постоянно идёт запись логов, а другая должна (но не может) открыть этот файл на чтение. Как нужно сделать так, чтобы появился доступ на чтение к файлу. Использую в программе (которая пишет логи), вот такой код: Код: QFile file; Спасибо! Название: Re: Доступ к одному файлу из разных программ Отправлено: gil9red от Май 18, 2017, 10:35 Варианты:
1. Попробуйте в той проге, что пишет логи после написания закрывать файл 2. Или хранить логи в базе простенькой логи (например sqlite) Название: Re: Доступ к одному файлу из разных программ Отправлено: ApexUFO от Май 18, 2017, 11:08 Варианты: 1. Попробуйте в той проге, что пишет логи после написания закрывать файл 2. Или хранить логи в базе простенькой логи (например sqlite) 1. Если закрывать файл, то может получится так, что вторая программа заблокирует файл для первой. Разве нет? 2. К сожалению, на той машине, где будет крутится первая программа, разрешений на установку, даже SQLite, у меня нет. В C# использовал такую конструкцию: Код: file = new StreamReader(new FileStream(path + "test.log", FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete)); Название: Re: Доступ к одному файлу из разных программ Отправлено: Igors от Май 18, 2017, 11:13 Ну что решаемо - это точно, напр Far всегда умел читать логи которые сейчас пишутся. Для начала попробовать проскочить на шару - попробовать др режим открытия по записи
Название: Re: Доступ к одному файлу из разных программ Отправлено: ApexUFO от Май 18, 2017, 11:45 Ну что решаемо - это точно, напр Far всегда умел читать логи которые сейчас пишутся. Для начала попробовать проскочить на шару - попробовать др режим открытия по записи А как? Пробовал так: file.open(QIODevice::WriteOnly|QIODevice::Append); file.open(QIODevice::ReadWrite|QIODevice::Append); Название: Re: Доступ к одному файлу из разных программ Отправлено: Igors от Май 18, 2017, 12:06 А как? Пробовал так: Дался Вам тот Append - самому сделать seek в конец. Начните с просто ReadWritefile.open(QIODevice::WriteOnly|QIODevice::Append); file.open(QIODevice::ReadWrite|QIODevice::Append); Название: Re: Доступ к одному файлу из разных программ Отправлено: vic57 от Май 18, 2017, 12:42 http://doc.qt.io/qt-5/qfilesystemwatcher.html#details
https://habrahabr.ru/sandbox/47189/ алгоритм такой - 1. открыть лог на запись(Append), записать и закрыть 2. по сигналу fileChanged открыть лог на чтение, прочитать и закрыть Название: Re: Доступ к одному файлу из разных программ Отправлено: ApexUFO от Май 19, 2017, 12:09 Нашёл ответ! Чтобы доступ к файлу смогли иметь другие программы, нужно в начале выполнить запись буфера в основной поток out.flush(), а затем записать данные в файл file.flush() и закрывать файл при этом уже не нужно!
Код: QFile file; Всем спасибо! |