2010-01-07 5 views
1

J'ai actuellement une application Python que je suis en train de développer qui va sculpter un périphérique de bloc pour les fichiers jpeg. Disons simplement que cela fonctionne parfois et parfois non. Je l'ai créé pour que je lise le périphérique de bloc jusqu'à ce que je trouve un ffd8, puis je garde le flux ouvert et recherche via la boucle pour la fermeture de ffd9. Bien que j'ai toujours besoin de prendre en compte toutes les fermetures ffd9 même après la première. Donc, il a tendance à être une opération très intensive. Compte tenu d'un appareil avec disons 25 jpegs ainsi que beaucoup d'autres données, la boucle est assez spectaculaire et cela fonctionne beaucoup.Amélioration de la boucle de découpage de données

Le programme n'est pas le plus lent au monde, mais je pense qu'il pourrait être beaucoup plus rapide et beaucoup plus efficace. Je suis à la recherche d'un meilleur moyen de rechercher le périphérique et d'extraire les données de manière plus efficace. Je ne veux pas non plus tuer le disque dur ou le lecteur contenant l'image du périphérique bloc.

Est-ce que quelqu'un connaissait donc une meilleure façon de gérer systématiquement la recherche et l'extraction des données?

Répondre

2

Le problème avec la lecture directe du périphérique bloc est qu'il n'y a aucune garantie que les blocs d'un fichier donné sont contigus. Cela signifie que même si vous trouvez votre marqueur magique octets 0xFFD8 dans le bloc 13, par exemple, il n'y a aucune garantie que le bloc 14 appartient au même fichier, qu'il contienne ou non le marqueur de fin 0xFFD9 ou non. (La plupart des fichiers commencent à une limite de bloc, la fin du fichier peut être n'importe où, peut-être même à travers les limites du bloc.)

Quelle est la meilleure façon de faire? Eh bien, cela dépend de ce que vous recherchez - mais si vous ne regardez que les blocs actuellement alloués, scannez le système de fichiers en utilisant l'analogue Python de la fonction POSIX C ftw (nftw), et lisez chaque fichier tour à tour. Vous ne trouverez aucune preuve de suppression des fichiers JPEG dans la liste libre. Si c'est ce que vous recherchez, vous devrez faire plus ou moins ce que vous faites, mais corréler ces informations avec ce que vous trouvez dans le système de fichiers. correct. La cartographie de ces blocs sera (au mieux) difficile.