2010-07-18 12 views
2

Étant donné le chemin d'une chaîne, je souhaite effacer le contenu d'un fichier. La manière naturelle que je pensais (qui peut-être incorrecte) était d'ouvrir un fichier FileStream dans le fichier et d'écrire du charabia (des données aléatoires peut-être prises d'un RNGCryptoServiceProvider). Et puis peut-être faire cela plusieurs fois et ensuite supprimer le fichier. Mon problème est que même si cela peut sembler logique, je lis sur un autre blog que Windows pourrait effectivement choisir d'écrire le fichier à un endroit différent sur le disque dur.Nettoyage sécurisé des fichiers dans Compact Framework

Est-ce le cas dans Windows Mobile? Cela sera-t-il réellement un problème? Est-ce que cette écriture à un emplacement différent dans le disque dur s'applique même aux cartes basées sur le flash (SD, etc.)?

+2

Je ne sais pas avec certitude, mais le firmware de mise à niveau pour des choses comme SD/SSD peut les rendre * plus * sensibles à cela. –

+1

@Marc: oui, l'usure de la carte va certainement les rendre très sensibles. Idem pour le flash embarqué. – ctacke

+0

Donc, juste en écrivant plusieurs fois le fichier avec 1 et 0 ne garantirait pas que le fichier est correctement écrasé? –

Répondre

0

Je ne l'ai pas fait personnellement, mais vous devrez probablement utiliser les commandes IOCTL FLASH de bas niveau pour le faire correctement.

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

Je pense que IOCTL_FMD_RAW_WRITE_BLOCKS semble particulièrement utile.

-PaulH


Une autre possibilité qui peut fonctionner serait d'effacer le fichier normalement, puis utiliser les API de défragmenter pour effacer TOUS les freespace sur votre flash. Puisque vous essuyez tout, il ne sera pas nécessaire de savoir exactement où se trouvait votre fichier sur le disque. Mais, cela va épuiser votre lecteur flash plus rapidement. La méthode C# est détaillée dans ce billet de blog: http://blogs.msdn.com/b/jeffrey_wall/archive/2004/09/13/229137.aspx

+0

Il aurait besoin de trouver le bloc où le fichier est pour que ce soit utile, plus s'il est sur un magasin monté comme une carte CF/SD, cela ne fonctionnera pas car la carte est probablement en train de faire l'égalisation et vous n'avez pas d'accès en écriture brute à l'emplacement des données. – ctacke

+0

@ctacke - Qu'en est-il de l'API defrag [http://msdn.microsoft.com/fr-fr/library/aa365731%28v=VS.85%29.aspx]? SDelete [http://technet.microsoft.com/en-us/sysinternals/bb897443] utilise pour localiser les fichiers sur le disque. – PaulH

+0

Cette question concerne Windows CE/Windows Mobile, donc il n'y a pas d'API de défragmentation. – ctacke