Size: a a a

2020 December 08

RS

Renat Suleymanov in Delphi & Lazarus
А так. INI не то чтобы устарел. Многие программы продолжают его юзать. Даже в Linux. Просто он в некоторых моментах менее удобен. Но запрет доступа к файлу это не про формат хранения настроек. Это про права доступа к файлу
источник

RS

Renat Suleymanov in Delphi & Lazarus
Сергей Пятыгин
Не настроек программы, а результата работы. Имею ввиду по аналогии к примеру с Word блокировать docx.
Если результаты работы это просто отчет, то INI file не подходящ. Можно просто текстовый файл. Вообщем, тут дело в JSON/INI
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Перефразирую задачу: если файл выполнения работы программы уже кем то открыт, то никто другой его не может открыть для редактирования.
Например Writer создает скрытый файл:
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Внутри скрытого файла данные-кто открыл.
источник

RS

Renat Suleymanov in Delphi & Lazarus
Нужно самому организовать чтение файла. К примеру, TFileStream с нужными права эксклюзивного доступа. А какова разметка это файла INI или JSON или XML выбирай сам. Можно даже создавать тогда и временный файл как это делает Word к примеру и сохранять там соответствующие метки
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Пользователь, который попытается открыть этот файл Untitled 1.docx получить сообщение, что файл уже открыт, а из .~lock.Untitled 1.docx# Writer считывается информация.
источник

RS

Renat Suleymanov in Delphi & Lazarus
Сергей Пятыгин
Пользователь, который попытается открыть этот файл Untitled 1.docx получить сообщение, что файл уже открыт, а из .~lock.Untitled 1.docx# Writer считывается информация.
Ну это самому надо организовывать. И как упомянул выше разметка формата данных тут не имеет значение
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Renat Suleymanov
Нужно самому организовать чтение файла. К примеру, TFileStream с нужными права эксклюзивного доступа. А какова разметка это файла INI или JSON или XML выбирай сам. Можно даже создавать тогда и временный файл как это делает Word к примеру и сохранять там соответствующие метки
Да, диссонанс в голове: сейчас сделано, по моим ощущениям не корректно. Файл открывается и читается в поток FFileLock := TFileStream.Create(ProjectFileName, fmOpenReadWrite or fmShareDenyWrite) и соответственно блокируется  
а потом поток в IniFile := TMemIniFile.Create(FFileLock).
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Не нашел ответа в гугле: логика верна или нет открыть файл в потоке, потом делать обработку разметки этого потока?
источник

SB

Sergey Bodrov in Delphi & Lazarus
Сергей Пятыгин
Да, диссонанс в голове: сейчас сделано, по моим ощущениям не корректно. Файл открывается и читается в поток FFileLock := TFileStream.Create(ProjectFileName, fmOpenReadWrite or fmShareDenyWrite) и соответственно блокируется  
а потом поток в IniFile := TMemIniFile.Create(FFileLock).
TMemIniFile сам по себе с файлом работает, не нужно для него поток создавать
источник

RS

Renat Suleymanov in Delphi & Lazarus
Sergey Bodrov
TMemIniFile сам по себе с файлом работает, не нужно для него поток создавать
Ему нужно прочесть файл и заблокировать его для чтения. А потом уже работать как с ИНИ. TMemIniFile так может?
источник

RS

Renat Suleymanov in Delphi & Lazarus
Сергей Пятыгин
Да, диссонанс в голове: сейчас сделано, по моим ощущениям не корректно. Файл открывается и читается в поток FFileLock := TFileStream.Create(ProjectFileName, fmOpenReadWrite or fmShareDenyWrite) и соответственно блокируется  
а потом поток в IniFile := TMemIniFile.Create(FFileLock).
Не знаю, надо пробовать. Я бы работал с json в этом случае. Прочитав из файла стримил бы его в объект и при сохранении обратно
источник

z

zamtmn in Delphi & Lazarus
зачем ини? xml или json
источник

SB

Sergey Bodrov in Delphi & Lazarus
Renat Suleymanov
Ему нужно прочесть файл и заблокировать его для чтения. А потом уже работать как с ИНИ. TMemIniFile так может?
Не знаю, вряд ли. Странная задача на мой взгляд.
источник

RS

Renat Suleymanov in Delphi & Lazarus
Сергей Пятыгин
Да, диссонанс в голове: сейчас сделано, по моим ощущениям не корректно. Файл открывается и читается в поток FFileLock := TFileStream.Create(ProjectFileName, fmOpenReadWrite or fmShareDenyWrite) и соответственно блокируется  
а потом поток в IniFile := TMemIniFile.Create(FFileLock).
Я бы сделал так. СЧитал из файла в строку JSON. ИЗ строки преобразовал бы в объект (который можно использовать в других модулях) и при сохранении обратно из объект в JSON и затем в файл
источник

SB

Sergey Bodrov in Delphi & Lazarus
zamtmn
зачем ини? xml или json
Если xml, то сразу в xlsx, удобно просматривать и места мало занимает =)
источник

RS

Renat Suleymanov in Delphi & Lazarus
В принципе такое и с INI можно провернуть видимо. Но навскидку не знаю как точно это сделать
источник

RS

Renat Suleymanov in Delphi & Lazarus
Кстати, еще вариант ) Хранить зазипованным INI файл. При открытии также блокировать файл. Распаковывать и сохранять в энтот самый временный файл, откуда стандартно загрузить INI file с помощью класса TMemIniFile. Затем в обратном порядке тоже
источник

z

zamtmn in Delphi & Lazarus
файл нужен только в моменты чтения-записи, в остальное время юзать какойто внутренний удобный формат. в промежутках файл держать заблокированным
источник

AS

Alexey Shumkin in Delphi & Lazarus
Сергей Пятыгин
По ощущениям-устарел. Так же возникла необходимость блокировать файл для повторного открытия если он уже открыт по локальной сети. Ищу варианты.
возникла необходимость блокировать файл для повторного открытия если он уже открыт по локальной сети

пересмотри подход.. это УГ
источник