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 versions. Demande d'aide. C#


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut Comparaison de versions. Demande d'aide. C#
    Bonjour, je suis en BTS Services Informatiques aux Organisations 1ere année depuis le début de celle-çi.

    Je suis entrain de développer, sous demande de mon maître d'apprentissage, une petite application qui compare les versions d'un fichier sur mon répertoire à ceux sur une base de donnée.
    Je dois maintenant effectuer une tache qui me semble un peu compliqué vu ma connaissance en dev.

    Ce que je dois faire:

    Je dois comparer deux fichiers, dans une base de donnée et dans mon répertoire local, si mon fichier n'existe pas dans mon répertoire, alors je marque "0" à la place de sa version, dans mon fichier récapitulatif. Et Inversement, si mon fichier n'existe pas dans ma base de donnée, je dois noter "0" dans mon fichier récapitulatif à la place de sa version.

    Exemple: (Fichier existant dans mon répertoire, mais n'existe pas dans ma base de donnée, cela donne alors):

    NOMDUFICHIER | 0 | VERSIONREPERTOIRE (exemple: 37.15.01.33) | 0/1 (selon si les deux fichiers ont la même version)

    Donc voila, j'ai fais la plupart du travail, mais je bloque à ce moment là.

    Voici mon code:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    namespace VerifDllsVersion
    {
        class Program
        {
            static void Main(string[] args)
            {
     
                Hashtable htDllsInfos = GetDllsInformationFromBase();
                IDictionaryEnumerator iEnum = htDllsInfos.GetEnumerator();
                File.Delete("C:\\Users\\maxursin\\Documents\\VersionsIdentical.log");
                File.Delete("C:\\Users\\maxursin\\Documents\\NotVersionsIdentical.log");
     
                string VersionFileHashtable = htDllsInfos.Values.ToString();
                string path = "C:\\Users\\maxursin\\Documents\\CppDll\\";
                string[] monTab = Directory.GetFiles(path, "CPS?????.dll");
                int TotalDlls = Directory.GetFiles(path, "CPS?????.dll").Length;
                int CompteurCPS = 0;
                string VersionDataBase = string.Empty;
                string VersionDirectory = string.Empty;
                DateTime StartDate = DateTime.Now;
                int compteurNotIdemCps = 0;
                bool V;
     
                while (iEnum.MoveNext() || CompteurCPS < TotalDlls)
                {
                    string[] tokins = monTab[CompteurCPS].Split('\\');
                    FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo("C:\\Users\\maxursin\\Documents\\CppDll\\" + tokins[5]);
     
                    V = File.Exists("C:\\Users\\maxursin\\Documents\\CppDll\\" + tokins[5]);
     
                    string[] tokens = iEnum.Value.ToString().Split('.');
                    VersionDirectory = myFileVersionInfo.FileVersion;
                    string[] tokons = VersionDirectory.Split('.');
     
     
     
     
     
                    string ConvertD = tokons[0];
                    string ConvertD1 = tokons[1];
                    string ConvertD2 = tokons[2];
                    string ConvertD3 = tokons[3];
                    int ConvertedD = int.Parse(ConvertD);
                    int ConvertedD1 = int.Parse(ConvertD1);
                    int ConvertedD2 = int.Parse(ConvertD2);
                    int ConvertedD3 = int.Parse(ConvertD3);
                    VersionDirectory = ConvertedD + "." + ConvertedD1 + "." + ConvertedD2 + "." + ConvertedD3;
     
     
                    string Convert = tokens[0];
                    string Convert1 = tokens[1];
                    string Convert2 = tokens[2];
                    string Convert3 = tokens[3];
                    int Converted = int.Parse(Convert);
                    int Converted1 = int.Parse(Convert1);
                    int Converted2 = int.Parse(Convert2);
                    int Converted3 = int.Parse(Convert3);
                    VersionDataBase = Converted + "." + Converted1 + "." + Converted2 + "." + Converted3;
                    CompteurCPS++;
     
                    File.AppendAllText("C:\\Users\\maxursin\\Documents\\VersionsIdentical.log",  tokins[5] + " | " + VersionDataBase + " | " + VersionDirectory);
     
                    if (VersionDataBase == VersionDirectory)
                    {
                        File.AppendAllText("C:\\Users\\maxursin\\Documents\\VersionsIdentical.log", " | 1" + "\r\n");
                    }
                    else
                    {
                        File.AppendAllText("C:\\Users\\maxursin\\Documents\\VersionsIdentical.log", "| 0" + "\r\n");                   
                        compteurNotIdemCps++;
                    }
                }
                Console.WriteLine("\r\n" + "There is " + compteurNotIdemCps + " Versions not identical");
                DateTime EndDate = DateTime.Now;
                Console.WriteLine("");
                Console.WriteLine(EndDate.Subtract(StartDate).TotalMilliseconds + " Milliseconds");
                Console.ReadKey();
            }
     
     
     
     
            public static Hashtable GetDllsInformationFromBase()
            {
                Hashtable htDllsInfos = new Hashtable();
     
                SqlConnection sCon = new SqlConnection("Data Source=FRPAVCLU1302\\FRPAVCLU1302;Initial Catalog=OCS_RELEASE37;Integrated Security=SSPI;");
                sCon.Open();
                if (sCon.State == System.Data.ConnectionState.Open)
                {
                    SqlCommand sCommand = new SqlCommand("select DllName, Version from OcsCPSDlls where DllName like 'cps%'", sCon);
                    SqlDataReader dataReader = sCommand.ExecuteReader();
                    while (dataReader.Read())
                    {
                        htDllsInfos.Add(dataReader[0], dataReader[1]);
                    }
                }
                sCon.Close();
                return htDllsInfos;
            }
        }
    }
    Merci de votre aide, bonne journée

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    sur quoi bloques tu ? une précision aurait été plus utile que juste du code ...

    quelques remarques sinon
    - ca manque de try catch, du code ca peut planter (par ta faute (bug) ou par un problème (accès à un fichier/db inaccessible)) il faut gérer cela (et enregistrer les détails de l'erreur)
    - il vaut mieux éviter d'utiliser des chemins de fichier dans le code, extraire les variables pour les mettre dans la classe (ou en paramètre dans un fichier de config si ce chemin peut changer souvent)
    - il faut réfléchir à ce qui peut se passer en cas de plantage, même un plantage qui fait que tu ne pourrais enregistrer que ca a planté
    est-il bien de travailler en écrivant dans le fichier (ou la base) au fur et à mesure ? en cas de plantage tu aurais des infos dans le fichier mais incomplètes sans que tu le sache
    je pense qu'il faut donc faire ca de manière ensembliste (tout ou rien)
    au passage ca permet de décomposer le code sans avoir un peu de tout au fur et à mesure

    1/ suppression des anciens résultats (j'ai cru comprendre ça dans ton code)
    2/ récupération de la liste des fichiers sur le disque
    3/ récupération de la liste en base
    3/ création de la liste des fichiers manquants/différents (list1.except(list2) en gros)
    4/ l'inverse
    5/ création du rapport pour le fichier
    6/ création du rapport pour la base de données
    7/ insert en base (dans une transaction)
    8/ écriture du fichier
    9/ commit sur l'insert en base

    n'hésite pas à extraire des morceaux de code dans des fonctions comme ca ta méthode principale sera lisible avec que des appels de fonction ayant un nom clair sur ce que ca fait


    après ton maitre d'apprentissage doit être là pour t'aider / te débloquer / t'enseigner des choses aussi je pense
    sinon tu préciser ta question, et/ou poster des maj du code si tu veux d'autres remarques
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Bonjour, merci de ta réponse.

    Je suis encore débutant, j'essaye d'apprendre

    Je n'est pas tout compris dans ce que tu m'a dis mais, je ne dois pas toucher a la base de donnée, ni au répertoire, je dois juste noter "0" à la place de la version du fichier manquant.
    Je vais essayer de tout mettre dans des fonctions.

    En gros, je bloque sur la gestion des fichiers manquant. Si mon fichier est présent dans ma base de donnée mais inexistante dans mon répertoire, je dois effectuer quelque chose de plus.

    Merci beaucoup.

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/09/2010, 23h32
  2. demande d'aide sur samba
    Par marcoss dans le forum Développement
    Réponses: 5
    Dernier message: 04/12/2003, 19h38
  3. [TPW][cours]Demande d'aide pour finir un programme
    Par jf dans le forum Turbo Pascal
    Réponses: 21
    Dernier message: 16/06/2003, 18h10

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