所以我碰巧在这个项目上工作,带有测量卡的Linux服务器可以运行一个过程,测量数据不断添加到文件中。该目录通过网络中的SMB2(samba)共享。 Windows 7 PC必须至少每0.5秒读取一次增长的文件,并从数据中获取最新的样本。
我需要filesize来获取一些样本,因为数据被格式化为某种具有恒定长度的块,从头开始计算。
这是一个MATLAB项目,但是在Python上也会出现以下问题(在Windows机器上!):
所以我打开文件,寻找到文件结尾和告诉获取文件大小,根据文件大小读取数据,然后关闭访问权限。每0.5秒重复一次。但是,当数据写入文件时,此文件大小始终是第一次访问时的值,因此我总是得到相同的样本数据。
现在,我可以使用 dir (MATLAB)或 os.stats (Python)获取正确和最新的文件大小,但是当我寻求接近那个位置和读取,我只返回空数据。
请注意,我已经发现如何使用特殊的注册表项禁用Windows中的SMB缓存,这有助于获取当前真正的文件大小,但使用tell的大小仍未更新。
所以我猜文件内容本身存储在服务器上,直到它停止写入文件,但文件大小的元信息似乎被转移。当我在服务器中运行Python脚本时,我可以顺利获取当前样本。
我知道这是糟糕的数据交换,并且已经计划改变它(长期)。但对于短期而言,我该如何解决这个问题?