Partager via


Procédure : accéder aux fichiers, les copier et les déplacer

Dernière modification : lundi 12 avril 2010

S’applique à : SharePoint Foundation 2010

Disponible dans SharePoint Online

Pour récupérer des fichiers et des dossiers d’un site Web, utilisez la méthode GetFile() ou GetFolder() de la classe SPWeb.

La méthode GetFolder de la classe SPWeb vous permet de retourner un dossier spécifié. Ensuite, vous pouvez accéder aux fichiers individuels de ce dossier. Après avoir instancié un objet SPWeb (par exemple, oWebsite), utilisez SPFolder oFolder = oWebsite.GetFolder("Shared Documents") (dans Microsoft Visual Basic, utilisez Dim oFolder As SPFolder = oWebsite.GetFolder("Shared Documents")) afin de retourner le dossier Documents partagés pour le site.

Exemple

L'exemple suivant retourne la collection des fichiers contenus dans le dossier et affiche des informations sur les fichiers.

Using oWebsite As SPWeb = New SPSite("https://Server/sites/SiteCollection").OpenWeb()
    Dim folderUrl As String = "/Shared Documents/MySubFolder"
    Dim oFolder As SPFolder = oWebsite.GetFolder(folderUrl)
    Dim collFile As SPFileCollection = oFolder.Files
    
    For Each oFile As SPFile In collFile
        Label1.Text += ("<BR>Url: " & oFile.Url.ToString() & " Size: ") + oFile.Length.ToString()
    Next
End Using
using (SPWeb oWebsite = new SPSite("https://Server/sites/SiteCollection").OpenWeb())
{
    string folderUrl = "/Shared Documents/MySubFolder";
    SPFolder oFolder = oWebsite.GetFolder(folderUrl);
    SPFileCollection collFile = oFolder.Files;

    foreach (SPFile oFile in collFile)
    {
        Label1.Text += "<BR>Url: " + oFile.Url.ToString() + " Size: " + oFile.Length.ToString();
    } 
}

L’exemple précédent répertorie l’URL et la taille de chaque fichier dans Shared Documents.

L’exemple nécessite une directive using (Imports dans Visual Basic) pour l’espace de noms Microsoft.SharePoint.

Vous pouvez charger les fichiers dans un objet List<T> générique pour énumérer une collection. L’exemple suivant déplace tous les fichiers de la liste Shared Documents du site actuel vers un sous-dossier nommé StorageFolder, en remplaçant tous les fichiers de même nom qui se trouvent dans le dossier.

Dim oWebsite As SPWeb = SPContext.Current.Web
Dim oFolder As SPFolder = oWebsite.GetFolder("Shared Documents")
Dim collFile As SPFileCollection = oFolder.Files

'Copy the files to a generic List of type SPFile
Dim listFiles As New List(Of SPFile)(collFile.Count)
For Each oFile As SPFile In collFile
    listFiles.Add(oFile)
Next

' Enumerate the List and move the files into the subfolder.
For Each moveFile As SPFile In listFiles
    moveFile.MoveTo("Shared Documents/StorageFolder/" & moveFile.Name, True)
Next
SPWeb oWebsite = SPContext.Current.Web;
SPFolder oFolder = oWebsite.GetFolder("Shared Documents");
SPFileCollection collFile = oFolder.Files;

/*Copy the files to a generic List of type SPFile*/
List<SPFile> listFiles = new List<SPFile>(collFile.Count);

foreach (SPFile oFile in collFile)
{
    listFiles.Add(oFile);
}

/* Enumerate the List and move the files into the subfolder.*/
foreach (SPFile moveFile in listFiles)
{
    moveFile.MoveTo("Shared Documents/StorageFolder/" + moveFile.Name, true);
}

L’exemple de code précédent requiert des directives using (Imports dans Visual Basic) pour les espaces de noms Microsoft.SharePoint et System.Collections.Generic.

Pour copier des fichiers d’un emplacement dans un autre, utilisez l’une des méthodes CopyTo() de la classe SPFile. L’exemple suivant énumère tous les dossiers et fichiers d’une bibliothèque de documents et les copie dans une autre bibliothèque de documents. Le gestionnaire d’événements Button_Click effectue une itération dans tous les fichiers du dossier de niveau supérieur, en listant le nom et la taille (en kilo-octets) de chaque fichier qui dépasse un multiple de la valeur spécifiée dans une zone de texte par l’utilisateur, puis appelle la méthode CopyToTarget pour copier le fichier dans un dossier spécifié. Ensuite, la méthode EnumerateFolder effectue une itération récursive dans tous les sous-dossiers et transmet chaque collection de fichiers à la méthode CopyToTarget. L’exemple suppose l’existence d’un bouton, d’une étiquette et de trois zones de texte permettant de spécifier une taille de fichier, un dossier source et un dossier cible dans le cadre de l’opération.

Private oWebsite As SPWeb

Protected Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim fromFolder As String = TextBox3.Text
    
    Dim oFolder As SPFolder = oWebsite.GetFolder(fromFolder)
    Dim collFile As SPFileCollection = oFolder.Files
    
    CopyToTarget(collFile)
    
    Dim collFolder As SPFolderCollection = oFolder.SubFolders
    
    EnumerateFolders(collFolder)
End Sub

Private Sub CopyToTarget(ByVal copyFiles As SPFileCollection)
    Dim mySize As String = TextBox1.Text
    Dim toFolder As String = TextBox2.Text
    
    Dim maxLength As Integer = Convert.ToInt32(mySize)
    
    For Each oFile As SPFile In copyFiles
        If oFile.Length > maxLength * 1024 Then
            Label1.Text += (SPEncode.HtmlEncode(oFile.Name) & ": ") + oFile.Length /1024 & "kb<BR>"
            oFile.CopyTo((toFolder & "/") + oFile.Name, True)
        End If
    Next
End Sub

Private Sub EnumerateFolders(ByVal copyFolders As SPFolderCollection)
    For Each subFolder As SPFolder In copyFolders
        If subFolder.Name <> "Forms" Then
            Dim subFiles As SPFileCollection = subFolder.Files
            
            CopyToTarget(subFiles)
        End If
        
        Dim subFolders As SPFolderCollection = subFolder.SubFolders
        
        EnumerateFolders(subFolders)
    Next
End Sub
private SPWeb oWebsite;

protected void Button_Click(object sender, EventArgs e)
{
    string fromFolder = TextBox3.Text;
            
    SPFolder oFolder = oWebsite.GetFolder(fromFolder);
    SPFileCollection collFile = oFolder.Files;

    CopyToTarget(collFile);

    SPFolderCollection collFolder = oFolder.SubFolders;

    EnumerateFolders(collFolder);
}

private void CopyToTarget(SPFileCollection copyFiles)
{
    string mySize = TextBox1.Text;
    string toFolder = TextBox2.Text;

    int maxLength = Convert.ToInt32(mySize);

    foreach (SPFile oFile in copyFiles)
    {
        if (oFile.Length > maxLength * 1024)
        {
            Label1.Text += SPEncode.HtmlEncode(oFile.Name) + ": " + oFile.Length / 1024 + "kb<BR>";
            oFile.CopyTo(toFolder + "/" + oFile.Name, true);
        }
    }
}

private void EnumerateFolders(SPFolderCollection copyFolders)
{
    foreach (SPFolder subFolder in copyFolders)
    {
        if (subFolder.Name != "Forms")
        {
            SPFileCollection subFiles = subFolder.Files;

            CopyToTarget(subFiles);
        }
                
        SPFolderCollection subFolders = subFolder.SubFolders;

        EnumerateFolders(subFolders);
    }
}

Dans cet exemple, la méthode CopyTo utilise deux paramètres, un qui spécifie l’URL de destination pour le fichier copié, tandis que l’autre est une valeur booléenne qui spécifie s’il faut remplacer tous les fichiers de même nom situés à l’emplacement de destination.

L’exemple de code précédent requiert des directives using (Imports dans Visual Basic) pour les espaces de noms Microsoft.SharePoint et Microsoft.SharePoint.Utilities.

Voir aussi

Référence

Microsoft.SharePoint

Concepts

Utilisation des objets Liste et des collections

Utilisation de Visual Studio pour le développement SharePoint

Validation de la sécurité et utilisation des publications pour la mise à jour des données

Élévation de privilège