2013-07-20 308 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

相關問題