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 :

Récupérer nom utilisateur fichier réseau [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Par défaut Récupérer nom utilisateur fichier réseau
    Bonjour,

    Mon programme doit ouvrir un fichier excel partagé sur le réseau, écrire dedans et le refermer. Mon soucis et que si un autre utilisateur du réseau a déjà ouvert ce fichier le programme travaille avec ce fichier en lecture seule (et donc pas de sauvegarde au moment de la fermeture dans le même emplacement avec le même nom)

    Est il possible de savoir si un fichier (ici excel) sur le réseau est déjà ouvert par un autre utilisateur et si oui d'afficher son nom (nom de sa session par exemple) ?

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    C'est assez risqué de vouloir faire des modifications sur un fichier partagé.

    Ce sont des applications qui viennent modifier ce fichier, des utilisateurs humains ou les deux ?
    Quelle méthode utilises-tu pour modifier ce fichier ? (montre-nous un extrait de code)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Par défaut
    C'est vrai que l'utilisation d'un fichier partagé excel comme mini base de donnée c'est pas top mais j'ai pas trop le choix.

    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
    //remplissage automatique des champs de la liste des devis
                //variable pour Excel
                //Application
                Excel._Application xlsAppl;
                //Classeur qui regroupe les feuilles
                Excel._Workbook xlsClasseurl;
                //Feuille sur laquelle on travaille
                Excel._Worksheet xlsFeuillel;
                // Créer un document Excel
                //instanciation d'une application
                xlsAppl = new Excel.Application();
                xlsAppl.Visible = false;
                // Ne pas tenir compte des alertes                    
                xlsAppl.DisplayAlerts = true;
                //ajout du classeur existant
                xlsClasseurl = xlsAppl.Workbooks.Open(emplacementListDevis, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                xlsFeuillel = (Excel.Worksheet)xlsClasseurl.Worksheets[1];
                //ajout du devis à la liste
                //chercher la dernière ligne de la liste
                bool next = true;
                int i = 1;
                while (next == true)
                {
                    i = i + 1;
                    try
                    {
                        xlsFeuillel.get_Range("E" + i, Missing.Value).get_Value(Missing.Value).ToString();
                        next = true;
                    }
                    catch
                    {
                        next = false;
                    }
                }
                //numéros du devis
                string numfinaldevis;
                string num;
                string dernierNumList = xlsFeuillel.get_Range("E" + (i - 1), Missing.Value).get_Value(Missing.Value).ToString();
                if (dernierNumList.Substring(1, 2) != DateTime.Now.ToString("yy"))
                {
                    num = dernierNumList.Substring(5, 3);
                }
                else
                {
                    num = "001";
                }
     
                int nouveaunum = (Int32.Parse(num)) + 1;
                //le parse convertit par exemple une chaine 091 en un int 91 d'où la nécessiter de d'ajouter un 0 devant le numréro si il est <100
                if ((nouveaunum < 100) && (nouveaunum > 9))
                {
                    numfinaldevis = "0" + (nouveaunum.ToString());
                }
                else
                {
                    numfinaldevis = nouveaunum.ToString();
                }
                if (nouveaunum < 10)
                {
                    numfinaldevis = "00" + (nouveaunum.ToString());
                }
                //nom du nouveau devis
                numDuDevis = 02 + DateTime.Now.ToString("yy") + DateTime.Now.ToString("MM") + numfinaldevis;
                string emplacementDuDevisClient = emplacementRepertoirRacineRepertoirClients + nomDuDossierClientSelc + @"\_Devis\" + light + "Devis_" + numDuDevis + "_" + designationDevis + ".xlsx";
                //copier et déplacer le classeur modèle vers le fichier _Devis du client   
                System.IO.File.Copy(emplacementModelDevis, emplacementDuDevisClient, true);


    Ce bout de procédure ouvre(sur le réseau local) le fichier excel(une liste de numéro de devis), récupère la dernière ligne où il y a quelque chose d'écrit, passe à la ligne suivante et inscrit le numéro du nouveau devis, sauvegarde et referme le fichier.
    Je souhaiterais pouvoir "tester la disponibilité" du ficher avant de l'ouvrir et de faire tout ce traitement. Savoir si quelqu'un d'autre sur le réseau à déjà ouvert ce fichier pour le consulter.

  4. #4
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Une solution simple serait de tenter de renommer le fichier dans un try/catch et intercepter l'erreur spécifique au fait que le fichier est déjà ouvert (à partir du message ou du type de l'exception).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Par défaut
    Merci pour ton aide Skalp.

    J'ai trouvé par hasard ceci en cherchant autre chose qui fonctionne également très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // check whether a file is read only
    bool isReadOnly = ((File.GetAttributes(filePath) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly);

    Je marque le sujet en résolu puisqu'il ne semble pas possible de récupérer le nom de l'utilisateur d'un fichier sur le réseau.

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

Discussions similaires

  1. [AC-2000] Récupérer NOM Utilisateur pour l'écrire dans une table
    Par goupil14 dans le forum Sécurité
    Réponses: 3
    Dernier message: 17/01/2010, 20h31
  2. récupérer nom de fichier en stdin
    Par J4e8a16n dans le forum Débuter
    Réponses: 9
    Dernier message: 10/06/2009, 18h25
  3. Récupérer nom des fichiers de données
    Par Milo59000 dans le forum SQL
    Réponses: 10
    Dernier message: 20/05/2008, 15h07
  4. récupérer nom de fichier sans l'extension
    Par ynk68 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 28/09/2007, 06h38
  5. [VBA-E] récupérer nom utilisateur fichier en lecture seule
    Par cwain dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/01/2007, 15h46

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