从另一个进程正在使用的文件中读取

对于一个应用程序,我想阅读谷歌浏览器的caching文件。 问题是,当Chrome正在运行的文件被打开,并可能由其进程更新。

所以当我尝试

data_1 = open("C:\Users\user\AppData\Local\Google\Chrome\User Data\Default\Cache\data_1")

它给了我

IOError: [Errno 13] Permission denied: 'C:\\Users\\user\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Cache\\data_1'

由于它说权限被拒绝( 编辑:我有'完全控制'权限的文件)我也尝试了一个提升的cmd窗口。 同样的情况。 当Chrome没有运行时,它工作正常。 我想要这样的东西(在.net上的文件共享) 。

我认为Chrome会允许共享读取权限,因为我已经看到了这个应用程序。

编辑:

我觉得我错了。 正如lulyon所说,似乎Chromelocking了这个文件。 因为我在vb.net上试过它:

 Dim d As New FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read) 

它说:

The process cannot access the file because it is being used by another process.

最初我以为ChromeCacheView会将文件复制到其他位置。 所以我使用进程监视器进行了更深入的研究。 请检查这个截图。 这是不是说这两个应用程序共享相同的文件?

进程监视器:Chrome和ChromeCacheView

ChromeCacheView是第三方应用程序,我不认为两者之间有任何理解。 那么怎么可能呢?

Chrome可能会阻止您写入正在使用的缓存文件。 尝试制作一个缓存文件的副本(使用任何工具(如cp命令)),然后用副本进行I / O。

一个可能的解释是,当chrome获得读,写和追加访问的权限时,只需打开带有读权限的文件,在场景后面通过查找操作读取字节会搅乱你自己的阅读内容,从而被操作系统拒绝。

在使用os.stat(filepath).st_mode调用具有默认读访问权限的函数之前,请检查读权限。 找到你是否有阅读权限。

只有在确认您没有阅读权限的情况下,我们才能进一步了解chrome为什么会阻止您访问缓存文件,而不是ChromeCacheView。