2013-07-20 3 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'.

Поскольку это говорит, что разрешение отклонено (EDIT: У меня есть разрешение «full controll» на файл). Я также пробовал его на повышенном cmd-окне. То же самое происходит. Он отлично работает, когда Chrome не работает. Я хочу что-то вроде this (FileShare on .net).

Я думаю, что Chrome предоставит доступ к общедоступному доступу, потому что я видел приложение this, выполняющее его.

Edit:

Я думаю, что я не прав. Как сказал 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

Скорее всего, хром помешает вам писать в файл кеша, который он использует. Попробуйте сделать копию файла кэша (с любыми инструментами (например, командой cp), которые у вас есть), и выполните ввод-вывод с репликой.

Возможное объяснение заключается в том, что когда хром получает разрешающую способность для чтения, записи и добавления доступа, просто открывая файл с разрешением на чтение, чтение байтов с помощью операции поиска за сценой может испортить ваш собственный контент для чтения, поэтому ему будет отказано по ОС.

Чтобы проверить разрешение на чтение, прежде чем вы вызовете функцию открытой с доступом по умолчанию, с помощью os.stat (путь к файлу) .st_mode; чтобы найти, есть ли у вас разрешение на чтение.

Только если подтверждено, что у вас нет разрешения на чтение, мы можем пойти дальше, чтобы выяснить, почему хром блокирует ваш доступ к кеш-файлу, но не относится к ChromeCacheView.

+0

Но мне не нужен доступ для записи. Если хром предотвращает доступ к чтению, то как это делают приложения, такие как ChromeCacheView? – rahul

+0

@rahul Итак, мы должны выяснить, что означает «Разрешение отказа». Ответ вам позже. – lulyon

+0

@rahul Это потому, что у вашего текущего пользователя нет доступа к папке, содержащей ваш файл кэша, или ваш файл кэша не читается для вашего текущего пользователя? Проверь это. – lulyon

Смежные вопросы