怎么判断一个ini文件里面的值一被改变就马上读取该数值

时间:2021-04-08 19:26:09
比如一ini文件里有个变量 IP=100, 有另外一个程序不定时的会改变这个IP, 当一但被改变就要立即读取它, 这要怎么实现呢?

谢谢

9 个解决方案

#1


做个线程时不时去读取一下这个文件吧。不过你要注意,在另外一个程序在写文件的时候不要用这个文件进行写操作

#2


钩住写文件的那个API应该也可以

#3


要怎么钩呢? 对钩子不是太懂

#4



TConfigFileMonitor = class(TThread)
  private
    h: THandle;
    FileName: string;
    FileInfo: WIN32_FILE_ATTRIBUTE_DATA;
    errorMsg: string;
    Notify: TConfigChangeEvent;
    FFinshed: boolean;
  public
    procedure Execute;override;
    constructor Create(const fName: string; const NotifyMe: TConfigChangeEvent);
    destructor Destroy;override;
  end;
线程的execute中使用
FindFirstChangeNotification来轮询

#5


楼上的这个方法会耗资源吗? 这个线程是一直跟循环一样一直在运行吗?   因为生产环境的电脑配置是非常非常差的, 要是太耗资源的会拖不起的

#6


要么判断ini是否被修改~~如果修改被修改,就读取数据做对比~~

#7


是不是思路有问题啊,是程序本身修改的ini吗?如果是的话就判断值是否修改,如果不是程序本身修改的ini的话,那也只能耗费资源了啊~~~

#8


用个定时器不行吗?
好像不对资源的耗费很小的。

就是读一下值,这么小一个事情,好像放一个线程里,一直运行着,不太好吧。反而乱费系统资源了。

#9


绝对是你的编程思路出了问题.不应该这么做.

#1


做个线程时不时去读取一下这个文件吧。不过你要注意,在另外一个程序在写文件的时候不要用这个文件进行写操作

#2


钩住写文件的那个API应该也可以

#3


要怎么钩呢? 对钩子不是太懂

#4



TConfigFileMonitor = class(TThread)
  private
    h: THandle;
    FileName: string;
    FileInfo: WIN32_FILE_ATTRIBUTE_DATA;
    errorMsg: string;
    Notify: TConfigChangeEvent;
    FFinshed: boolean;
  public
    procedure Execute;override;
    constructor Create(const fName: string; const NotifyMe: TConfigChangeEvent);
    destructor Destroy;override;
  end;
线程的execute中使用
FindFirstChangeNotification来轮询

#5


楼上的这个方法会耗资源吗? 这个线程是一直跟循环一样一直在运行吗?   因为生产环境的电脑配置是非常非常差的, 要是太耗资源的会拖不起的

#6


要么判断ini是否被修改~~如果修改被修改,就读取数据做对比~~

#7


是不是思路有问题啊,是程序本身修改的ini吗?如果是的话就判断值是否修改,如果不是程序本身修改的ini的话,那也只能耗费资源了啊~~~

#8


用个定时器不行吗?
好像不对资源的耗费很小的。

就是读一下值,这么小一个事情,好像放一个线程里,一直运行着,不太好吧。反而乱费系统资源了。

#9


绝对是你的编程思路出了问题.不应该这么做.