4

对于我想读取 Google Chrome 的缓存文件的应用程序。问题是当 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 所说,Chrome 似乎锁定了文件。因为我在 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 是第三方应用程序。那么这怎么可能呢?

4

1 回答 1

1

chrome 可能会阻止您写入它正在使用的缓存文件。尝试制作缓存文件的副本(使用您手头的任何工具(如 cp 命令)),并使用副本执行 I/O。

一种可能的解释是,当 chrome 获得读取、写入和附加访问权限时,只需以读取权限打开文件,在后台使用 seek 操作读取字节就会弄乱您自己的读取内容,因此被操作系统拒绝。

使用 os.stat(filepath).st_mode; 在调用函数之前检查读取权限,使用默认读取权限打开 查找您是否具有读取权限。

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

于 2013-07-20T07:33:58.087 回答