Question Lecture de tags - Problème de format ?

Plus d'informations
il y a 2 ans 8 mois #31178 par Marc VAN DAMME
Bonjour à tous,

Je me casse la tête sur ce code. Je souhaite lire mes fichiers MP3 et leurs tags Windows. Mais lorsque j'injecte les valeurs attendues j'obtiens le message d'erreur suivant  (j'ai mis en gras les lignes 23 et 25  en gras)
Impossible d’appeler une méthode dans une expression Null.
Au caractère E:\Software\Script Powershell\MP3_Tag - Export 3.ps1:23 : 5
+     $objFile = $objFolder.ParseName($MyFileName)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation : (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
Impossible d’appeler une méthode dans une expression Null.
Au caractère E:\Software\Script Powershell\MP3_Tag - Export 3.ps1:25 : 5
+     $IdTag_Year = $objFolder.GetDetailsOf($objFile, 15)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation : (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Mon code :
CLS
Clear-Host

#Répertoire MP3 à lire
$dataFolder = Set-Location "E:\_Singles"

$MyFolder = Get-ChildItem -Path $dataFolder -Recurse -File | Where-Object {$_.Name -match 'mp3$'}

foreach ($MyFile in $MyFolder)
{
    Write-Host $MyFile
    $MyFileName = $MyFile.Name
    write-host $MyFileName
    $MyFileFullName = $MyFile.fullname
    write-host $MyFileFullName

    write-host $MyFile.directory
    $MyFileDirectory = $MyFile.directory
    write-host $MyFileDirectory

    $objShell = New-Object -ComObject Shell.Application
    $objFolder = $objShell.Namespace($MyFileDirectory)
    $objFile = $objFolder.ParseName($MyFileName)

    $IdTag_Year = $objFolder.GetDetailsOf($objFile, 15)
    #write-host $IdTag_Year
}

Auriez-vous une idée ?
Merci par avance.

Marc.

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

Plus d'informations
il y a 2 ans 8 mois - il y a 2 ans 8 mois #31190 par ericlm128
La méthode Namespace de l'objet COM Shell.Application attend un chemin valide et pas un objet System.IO.DirectoryInfo

Voir la documentation : docs.microsoft.com/fr-fr/windows/win32/shell/shell-namespace

...
$objFolder = $objShell.Namespace($MyFileDirectory.FullName)
...
Dernière édition: il y a 2 ans 8 mois par ericlm128.

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

Plus d'informations
il y a 2 ans 8 mois #31198 par Marc VAN DAMME
Bonjour à tous,

Merci  ericlm128  pour ta réponse. J'ai fini par trouver la solution à mon pb qui était un souci de type de donnée : le format chaine de caractère devait-être spécifié sous la forme [string]$<nom de la variable>
Voici mon code :

CLS
Clear-Host

#Répertoire MP3 à lire
$dataFolder = Set-Location "E:\_Singles"

$MyFolder = Get-ChildItem -Path $dataFolder -Recurse -File | Where-Object {$_.Name -match 'mp3$'}

foreach ($MyFile in $MyFolder)
{
    Write-Host $MyFile
    [string]$MyFileName = $MyFile.Name
    write-host $MyFileName
    $MyFileFullName = $MyFile.fullname
    write-host $MyFileFullName

    write-host $MyFile.directory
    [string]$MyFileDirectory = $MyFile.directory
    write-host $MyFileDirectory

    $objShell = New-Object -ComObject Shell.Application
    $objFolder = $objShell.Namespace($MyFileDirectory)
    $objFile = $objFolder.ParseName($MyFileName)

    $IdTag_Year = $objFolder.GetDetailsOf($objFile, 15)
    #write-host $IdTag_Year
}

Problème résolu ;-)

Bonne fin de journée.
Marc

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

Plus d'informations
il y a 2 ans 8 mois - il y a 2 ans 8 mois #31202 par ericlm128
Tu effectue un cast implicite de l'objet FileInfo en string qui utilise la méthode ToString (définit dans l'objet). Par "chance" la méthode te retourne un chemin valide.
La propriété est déjà en string et son contenu correspond à ce que tu cherche.

Tu devrait être plus explicite, la vrai solution est celle que je te propose.

docs.microsoft.com/fr-fr/dotnet/api/syst...ostring?view=net-5.0
Important
La chaîne retournée par la ToString méthode représente le chemin d’accès qui a été passé au FileInfo constructeur. Au lieu d’appeler la ToString méthode, vous devez récupérer la valeur de l’une des propriétés suivantes, en fonction de votre intention :
•    Name, pour récupérer le nom du fichier, sans aucune information de chemin d’accès parent.
•    FullName, pour récupérer le chemin d’accès complet du fichier.
Dernière édition: il y a 2 ans 8 mois par ericlm128.

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

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