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

时间:2013-07-20 07:22:29

标签: python .net windows file

对于某个应用,我想阅读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 个答案:

答案 0 :(得分:1)

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

一个可能的解释是,当chrome获取读取,写入和附加访问权限时,只需打开具有读取权限的文件,在场景后面使用搜索操作读取字节会弄乱您自己的阅读内容,因此被拒绝操作系统。

使用os.stat(filepath).st_mode;在使用默认读访问权限打开函数之前检查读取权限。找出你是否有阅读许可。

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