2010-07-18 61 views
2

鑑於字符串的路徑,我想擦除文件的內容。我認爲自然的方式(可能不正確)是打開一個FileStream到文件並將亂碼(可能從RNGCryptoServiceProvider獲取的隨機數據)寫入文件。然後也許做幾次,然後刪除文件。在Compact Framework中安全擦除文件

我的問題是,雖然這可能看起來邏輯上正確,但我在另一個博客上讀到Windows可能實際選擇將文件寫入硬盤中的其他位置。

這是Windows Mobile的情況嗎?這實際上會成爲一個問題嗎?這是否寫入硬盤中的其他位置是否適用於基於閃存的(SD等)卡?

+2

我並不確定,但SD/SSD等耗材均衡固件可能會使其更容易受此影響。 – 2010-07-18 10:40:47

+1

@Marc:是的,卡片中的損耗確實會讓他們非常敏感。板載閃光燈也一樣。 – ctacke 2010-07-18 16:32:39

+0

因此,剛剛用1和0寫入文件幾次不能確保文件被安全覆蓋寫入? – 2010-07-18 17:30:47

回答

0

我沒有親自做過這件事,但您可能需要使用低級別的FLASH驅動程序IOCTL來正確執行此操作。

http://msdn.microsoft.com/en-us/library/aa927166.aspx

我覺得IOCTL_FMD_RAW_WRITE_BLOCKS看起來特別有用。

-PaulH


,可能工作會擦除文件通常,然後使用碎片整理API來清除所有的可用空間對你的flash另一種可能性。由於您正在擦除所有內容,因此無需確切知道您的文件在磁盤上的位置。但是,這會讓您的閃存驅動器更快磨損。本博客文章詳細介紹了C#方法:http://blogs.msdn.com/b/jeffrey_wall/archive/2004/09/13/229137.aspx

+0

他需要找到該文件所在的塊,以便用於任何用途,此外,如果它位於CF/SD卡之類的已安裝商店中,則該卡無法正常工作,因爲該卡可能正在進行磨損平衡並且您對數據所在的位置沒有原始寫訪問權限。 – ctacke 2011-01-18 21:56:50

+0

@ctacke - 碎片整理API怎麼樣[http://msdn.microsoft.com/en-us/library/aa365731%28v=VS.85%29.aspx]? SDelete [http://technet.microsoft.com/zh-cn/sysinternals/bb897443]用於在磁盤上查找文件。 – PaulH 2011-01-19 15:32:59

+0

這個問題是關於Windows CE/Windows Mobile,所以沒有碎片整理API。 – ctacke 2011-01-19 15:50:40