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 :

Lecture de fichiers et impersonation


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Par défaut Lecture de fichiers et impersonation
    Bonjour à tous et bonne année..

    Je développe actuellement une fonction qui doit récupérer le contenu d'un répertoire aux droits restreints pour en déplacer son contenu au sein d'un second dossier (SharePoint, pour être précis).

    Afin de donner le droit à C# d'aller lire le contenu du dossier, j'utilise l'API WIN32 me permettant de faire de l'impersonation.

    Ce code me permet donc d'accèder et de lire le contenu d'un répertoire donc l'accès est sécurisé :
    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
    public string uploadDoc(string domaine, string login, string passw)
    {
    web.AllowUnsafeUpdates = true;
     
     using (new Impersonation(login, domaine, passw))
                    {
                        try
                        {
                            if (web.GetFolder(nomLib).Exists)
                            {
                                //définition du dossier de reception
                                SPFolder folder = web.Folders[nomLib];
     
                                //lecture du document
                                FileStream fStream = File.OpenRead("C:/Transferts/monDoc.txt"); 
                                byte[] contents = new byte[fStream.Length];
                                fStream.Read(contents, 0, (int)fStream.Length);
                                fStream.Close();
     
                                //Ajout du document
                                folder.Files.Add("nom_du_document_copié", contents, true);
                                folder.Update();
    			    Console.writeLine("Document ajouté");
                            }
                        }
                        catch (System.Exception e)
                        {
                            Console.writeLine(e.Message + " : " + e.Source);
                        }
     
    		}
    	}
    web.AllowUnsafeUpdates = false;
    }
    Cela fonctionne évidemment très bien.


    Hors, lorsque je désire travailler sur tout le contenu du dossier, il me retourne une erreur, comme quoi je ne suis pas authorisé à lire le contenu du répertoire :


    Voici le code me posant problème : J'ai rajouté une lecture fichiers à fichiers du répertoire au sein de l'impersonation :
    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
    public void ParcourirDossier()
            {
    		using (new Impersonation(login, domaine, passw))
                    {
                        web.AllowUnsafeUpdates = true;
     
                        String[] fichiers = Directory.GetFiles("C:/Transferts");
     
     
                        for (int i = 0; i < fichiers.Length; i++)
                        {
                            this.uploadDoc(fichiers[i]);
                            Console.Out.WriteLine(fichiers[i]);
                        }
     
                    web.AllowUnsafeUpdates = false;
    		}
    	}
     
    //-----------------------------------------------------------------------
     
    	 public void uploadDoc(string urlDoc)
            {
                try
                {
                    if (web.GetFolder(nomLib).Exists)
                    {
                        //définition du dossier de reception
                        SPFolder folder = web.Folders[nomLib];
     
                        //lecture du document
                        FileStream fStream = File.OpenRead(urlDoc);
                        byte[] contents = new byte[fStream.Length];
                        fStream.Read(contents, 0, (int)fStream.Length);
                        fStream.Close();
     
                        //Ajout du document
                        folder.Files.Add("nom_du_document_copié", contents, true);
                        folder.Update();
                        Console.WriteLine("Document ajouté");
                     }
                 }
     
    	     catch (System.Exception e)
                 {
    			Console.Write(e.Message + " : " + e.Source);
    	     }
     
            }

    Cela me retourne l'erreur suivante:

    --> Could not find a part of the path 'C:/Transferts'. : mscorlib

    Et cela fonctionne sur n'importe quel autre répertoire, il me copie tous les fichiers dans le répertoire de destination..
    Comme si l'impersonation ne fonctionnait plus une fois dans la méthode :'(



    Un énorme merci d'avance pour tous ceux qui voudraient bien m'aider,
    zeni.

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Et cela fonctionne sur n'importe quel autre répertoire, il me copie tous les fichiers dans le répertoire de destination..
    Tu veux dire que c'est uniquement transferts qui pose problème ?

  3. #3
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Par défaut
    A prioris :/

    Etonnant dans le sens ou si je ne parcours pas le folder mais spécifie un fichier en paramètres, l'impersonation fonctionne et mon document est bien uploadé.

    Sinon, Sur la racine par exemple, il me liste l'intégralité des fichiers et uploade tout dans mon dossier SharePoint (la racine n'est pas protégée).

    Sans parcours du dossier, je suis donc en mesure de rentrer dans "C:/transfert" :/

  4. #4
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Par défaut
    ça me dépasse -_-"

    Je passe à côté de quelque chose d'évidement, j'en suis à peu près sur, mais après..

    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
    at System.IO.Directory.InternalGetFileDirectoryNames(String path, String userPathOriginal, String searchPattern, Boolean includeFiles, Boolean includeDirs, SearchOption searchOption)
    at System.IO.Directory.GetFiles(String path, String searchPattern, SearchOption searchOption)
    at System.IO.Directory.GetFiles(String path)
    at UploadeurV1.TraiterDossier.ParcourirDossier()
    at UploadeurV1.Uploadeur.Main(String[] args)
    at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
    at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    at System.Threading.ThreadHelper.ThreadStart()

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    C:/Transferts
    Pas C:\Transferts plutôt ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FileStream fStream = File.OpenRead("C:\\Transferts\\monDoc.txt");
     
    String[] fichiers = Directory.GetFiles("C:\\Transferts");

  6. #6
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Par défaut
    Non, ce n'est pas cela (malhereusement, ce serai si beau).

    J'entend par là, que n'importe quel autre chemin fonctionne, cette erreur ce produit uniquement sur ce dossier, et, si je cherche un fichier en particulier dedans, pas de problèmes..

    Directory.GetFiles ne rajouterai t'il pas des contraintes de sécurité par hazard ?

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

Discussions similaires

  1. [Windows]lecture des fichier lnk (raccourcis)
    Par Tiaps dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 21/10/2009, 19h27
  2. [jsp]lecture de fichier
    Par antigone dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 04/09/2003, 11h05
  3. [AS400][Intranet][PC] Lecture de "fichiers" AS400
    Par lando dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 16/07/2003, 11h11
  4. Lecture de fichier
    Par Watcha dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 04/03/2003, 20h43
  5. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 09h43

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