Résolu [Résolu] Suppression des fichiers corrompus ou illisibles

Plus d'informations
il y a 3 ans 11 mois - il y a 3 ans 10 mois #29843 par arj
Bonjour,

Je cherche à nettoyer mes différents espaces de stockage contenant essentiellement des photos (.jpg, .jpeg) et vidéos (.avi, .mov, .3gp) ayant des fichiers corrompus ou illisibles.

En gros quand vous allez via l'explorateur de fichier dans un dossier photo et que lorsque vous choisissez l'affichage via grandes icônes et que les miniatures n'apparaissent pas car le fichier est corrompu.

N'ayant pas trouver (ou su paramétrer) de logiciel spécialisé pour ça (style XnView), j'ai dans l'idée de faire un script PowerShell.

Je voudrais savoir si en partant de cet exemple (stackoverflow.com/questions/14614086/how...pg-jpeg-on-a-machine) on pourrait l'améliorer pour cibler les fichiers illisibles et les supprimer à leur découverte ?

J'aurais donc besoin de votre aide déjà pour m'indiquer si un tel script est réalisable, et comment détecter un fichier .jpg ne contenant aucune propriétés d'image ?
Merci
Dernière édition: il y a 3 ans 10 mois par Arnaud Petitjean.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 11 mois #29844 par Laurent Dardenne
Salut,
avant d'aller plus loin il faut déjà savoir déterminer par code si un fichier graphique est erroné.
Essaie avec cette Api : docs.microsoft.com/fr-fr/dotnet/api/syst...mFile_System_String_

S'il est correct le chargement se fera, ensuite reste à supprimer la ressource que cet appel crée :
docs.microsoft.com/fr-fr/dotnet/api/syst...=dotnet-plat-ext-3.1

Dans le cas contraire il faut gérer l'exception déclenchée.
Je n'ai pas de fichier de test sous la main pour coder un exemple...

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 11 mois - il y a 3 ans 10 mois #29845 par Laurent Dardenne
Un début :
Add-Type -AssemblyName System.Drawing
Cd c:\temp\test
Dir *.jpg,*.png|
 Foreach-Object {
   $CurrentFile="$_"
    Try {
        $image=$null
        $Image=[System.Drawing.Image]::FromFile($CurrentFile)
        $Image.Dispose()
        Write-host "Fichier chargé: '$CurrentFile'" -fore green
    } catch {
        #$null -eq image #ici $True
        Write-Warning "Fichier erroné : '$CurrentFile'`r`n Cause :`r`n $_"
    }
 }
Ici j'utilise un warning pour la visu uniquement.
J'ai modifié l'entête binaire d'un fichier .jpg pour le test.
A vérifier avec tes fichiers.

Tutoriels PowerShell
Dernière édition: il y a 3 ans 10 mois par Arnaud Petitjean.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 11 mois #29846 par arj
Bonjour et merci Laurent, je vais regarder tout ça et te ferais un retour.
Pour le moment j'ai effectué des recherche en filtrant sur les dimensions d'un fichier jpg via l'explorateur de fichier, c'est laborieux mais ça fonctionne lorsqu'il n'y a pas trop de fichier…

Cdt

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 11 mois #29847 par arj
Re,

J'ai effectué quelques tests et cela fonctionne.
Les fichiers corrompus sont remontés comme exception avec mémoire insuffisante voir ci-dessous:

PS F:temptest> Add-Type -AssemblyName System.Drawing
PS F:temptest> Cd F:temptest
PS F:temptest> Dir *.jpg,*.png|
>> Foreach-Object {
>> $CurrentFile="$_"
>> Try {
>> $image=$null
>> $Image=[System.Drawing.Image]::FromFile($CurrentFile)
>> $Image.Dispose()
>> Write-host "Fichier chargé: '$CurrentFile'" -fore green
>> } catch {
>> #$null -eq image #ici $True
>> Write-Warning "Fichier erroné : '$CurrentFile'`r`n Cause :`r`n $_"
>> }
>> }
AVERTISSEMENT : Fichier erroné : 'F:temptestattachment1.jpg'
Cause :
Exception lors de l'appel de « FromFile » avec « 1 » argument(s) : « Mémoire insuffisante. »
AVERTISSEMENT : Fichier erroné : 'F:temptestattachment2.jpg'
Cause :
Exception lors de l'appel de « FromFile » avec « 1 » argument(s) : « Mémoire insuffisante. »
AVERTISSEMENT : Fichier erroné : 'F:temptestattachment3.jpg'
Cause :
Exception lors de l'appel de « FromFile » avec « 1 » argument(s) : « Mémoire insuffisante. »
Fichier chargé: 'F:temptestno-user.jpg'
AVERTISSEMENT : Fichier erroné : 'F:temptestattachment121.png'
Cause :
Exception lors de l'appel de « FromFile » avec « 1 » argument(s) : « Mémoire insuffisante. »
AVERTISSEMENT : Fichier erroné : 'F:temptestattachment122.png'
Cause :
Exception lors de l'appel de « FromFile » avec « 1 » argument(s) : « Mémoire insuffisante. »
AVERTISSEMENT : Fichier erroné : 'F:temptestattachment124.png'
Cause :
Exception lors de l'appel de « FromFile » avec « 1 » argument(s) : « Mémoire insuffisante. »
Fichier chargé: 'F:temptesticon-contact.png'
Fichier chargé: 'F:temptesticon-file.png'
Fichier chargé: 'F:temptesticon-music.png'
PS F:temptest>

Je te joins les fichiers que j'ai utilisés en pj.
Les 3 fichiers chargés sont ok, tous les autres sont HS.
Si je comprends bien ensuite il n'y a plus qu'à changer la dernière ligne pour effectuer une suppression au lieu du warning ?

Encore merci<br><br>Message édité par: arj, à: 16/05/20 21:26

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 11 mois #29848 par arj
fichier zip

La pièce jointe temptest.zip est absente ou indisponible

Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.093 secondes
Propulsé par Kunena