对于一个应用程序,我想阅读谷歌浏览器的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会将文件复制到其他位置。 所以我使用进程监视器进行了更深入的研究。 请检查这个截图。 这是不是说这两个应用程序共享相同的文件?
ChromeCacheView是第三方应用程序,我不认为两者之间有任何理解。 那么怎么可能呢?
Chrome可能会阻止您写入正在使用的缓存文件。 尝试制作一个缓存文件的副本(使用任何工具(如cp命令)),然后用副本进行I / O。
一个可能的解释是,当chrome获得读,写和追加访问的权限时,只需打开带有读权限的文件,在场景后面通过查找操作读取字节会搅乱你自己的阅读内容,从而被操作系统拒绝。
在使用os.stat(filepath).st_mode调用具有默认读访问权限的函数之前,请检查读权限。 找到你是否有阅读权限。
只有在确认您没有阅读权限的情况下,我们才能进一步了解chrome为什么会阻止您访问缓存文件,而不是ChromeCacheView。