IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Comparaison de nom de fichier C#


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut Comparaison de nom de fichier C#
    Bonjour tout le monde,

    Voici mon problème , j'aimerai crée une méthode qui compare tout les noms des fichiers présent dans un certain Folder, et que si par exemple deux fichiers ( Avec des extensions différentes) ont le même nom alors je peux travailler dessus.(Ex: Je zip un txt et pdf du même nom).

    J'ai pas trop d'idée de par où commencer surtout sur la comparaison.

    Je comptais utiliser des buffers mais je ne sais pas si c'est optimisé..


    Merci bcp d'avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Une idée en passant: charger la liste des noms de fichier dans une liste de chaines, et utiliser une requête LINQ pour trouver les "doublons".
    Il ne te reste plus alors qu'à parcourir le résultat et traiter les fichiers.

    Tatayo.

  3. #3
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut
    merci pour l'idée , mais admettons je fasse ma boucle qui cherche dans ma list de fichiers , dès qu'elle trouve le doublons comment je lui dit "Retourne moi les deux fichiers doublons".

    En clair si je veux les traiter il faut quelle me renvoie du style : "c://GROUP/test.txt"+"c://GROUP/test.pdf"


    Ha je viens de comprendre pardon , c'est la LINQ qui me retourne à chaque fois ma value donc ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    C'est ça.
    On peut par exemple imaginer une liste d'objets, avec deux membres: le nom complet du fichier, et le nom "à comparer" (ou un accesseur qui le renvoie).
    La requête LINQ va donc juste renvoyer la liste des objets qui ont "un doublon" sur cette deuxième valeur.
    On peut alors parcourir le résultat de la requête avec un simple FOREACH,et pour chaque objet on a de fait le nom complet du fichier.

    Tatayo.

  5. #5
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut
    En gros dans l'état actuel des choses avant cette comparaison je dois faire d'autre traitement sur le dossier donc au moment où je dois comparé j'ai deux listes . Une listes contenant tout les NameWithExtension de chaque fichier et une autre list idem pour les pdf . Est-ce que la à ce moment là ca nous aide pour la requête LINQ ou est-ce que je dois comparé avant de splité les fichiers dans les listes?

  6. #6
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut
    Pour l'instant j'ai trouvé ça comme alternative ( code ci dessous ) , je me fais afficher les pdf qui ont le même nom que des .txt présent dans la première liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    public void compare(List<string> listTxt, List<string> listPdf)
            {
     
                string pdf_doubl="";
     
                foreach (var pdf_File in listPdf)
                {
                    try
                    {
                        if (listTxt.Contains(pdf_File))
                        {
                            pdf_doubl = pdf_File;
                            Console.WriteLine(pdf_doubl);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                        throw;
                    }
                }
            }

  7. #7
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Un petit exemple de ce que l'on peut faire avec Linq :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    var dictionary = Directory
    	.EnumerateFiles("C:\\Group") // liste (chemin + nom) des fichiers du répertoire C:\Group
    	.Select(Path.GetFileName) // ne garder que le nom du fichier
    	.GroupBy(f => Path.GetFileNameWithoutExtension(f.ToLower())) // regrouper par le nom en minuscule sans extension
    	.Where(g => g.Count() > 1) // ne garder que les groupes contenant plus d'un élément (c.à.d les doublons)
    	.ToDictionary(g => g.Key, g => g.ToArray()); // extraire un dictionnaire avec en clé le nom de fichier en minuscule sans extension, en valeurs des tableaux de noms de fichier
     
    foreach(var kvp in dictionary)
    {
    	Console.WriteLine($"Key : {kvp.Key}");
    	foreach(var file in kvp.Value)
    	{
    		Console.WriteLine(file);
    	}
    }
    En espérant que ça te guide dans tes recherches ; n'hésite pas à poser des questions pour mieux comprendre ce que fait chaque élément.

  8. #8
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut
    Salut Noxen merci pour l'exemple écoute ca marche nikel , je comprend globalement tout ce que tu m'a montré.

    Ca m'offre une opportunité d'optimisation de ma méthode , c'est vrai que LINQ offre de grande possibilités.

    Topic RESOLU merci à tous

  9. #9
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut
    Salut tout le monde je réouvre le topic.

    Dans la requête LINQ on appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .Select(Path.GetFileName)
    J'aimerai non pas qu'il cherche le non complet du fichier mais juste partie. Comment pourrais-je m'y prendre ?

    Je voulais crée une liste avec les noms des fichiers mais raccourcis et Select dessus mais ça ne marche pas..

    Merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle avec comme condition une comparaison de nom de fichiers
    Par yonafunu dans le forum Général Python
    Réponses: 4
    Dernier message: 18/07/2017, 13h24
  2. [Python 3.X] Comparaison de noms de fichiers avec recherche aussi approximative
    Par Rdjinn dans le forum Général Python
    Réponses: 2
    Dernier message: 10/06/2016, 16h52
  3. Comparaison nom de fichier
    Par TrafalgarD dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 01/04/2016, 17h16
  4. Comparaison et tri en fonction du nom du fichier
    Par halloumiali dans le forum C
    Réponses: 9
    Dernier message: 20/03/2012, 18h16
  5. Problème de comparaison de noms de fichiers
    Par ProviewJava1 dans le forum C
    Réponses: 4
    Dernier message: 19/01/2007, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo