2013-07-20 35 views
3

对于我想要读取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没有运行时,它工作正常。我想要类似this (FileShare on .net)

我认为Chrome将允许共享读取权限,因为我已经看到this应用程序在执行此操作。

编辑:

我想我错了。正如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将文件复制到其他位置。所以我用过程监视器进行了更深入的研究。请检查此截图。这是不是说这两个应用程序都共享相同的文件?

Process monitor: Chrome and ChromeCacheView

我不认为会既是ChromeCacheView之间的理解是第三方应用程序。那么怎么可能呢?

回答

1

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

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

要检查你调用读访问权的功能具有默认打开之前,与os.stat(文件路径).st_mode读权限;找到你是否有阅读权限。

只有当它被确认济,你有没有读在未经许可的,我们可以进一步去弄清楚为什么镀铬阻止缓存文件的访问权限,但不是说ChromeCacheView的。

+0

但我不需要写入权限。如果Chrome浏览器也阻止读取访问,那么像ChromeCacheView这样的应用程序如何做? – rahul

+0

@rahul所以我们必须弄清楚“权限被拒绝”是什么意思。稍后回复。 – lulyon

+0

@rahul是因为当前用户没有访问权限设置为包含您的缓存文件,或者缓存文件无法读取到当前用户的文件夹?核实。 – lulyon

相关问题