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:
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:
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.