Gewusst wie: Zugreifen auf Dateien, Kopieren und Verschieben von Dateien

Letzte Änderung: Montag, 12. April 2010

Gilt für: SharePoint Foundation 2010

Verfügbar in SharePoint Online

Verwenden Sie zum Abrufen von Dateien und Ordnern aus einer Website die GetFile()- oder GetFolder()-Methode der SPWeb-Klasse.

Mit der GetFolder-Methode der SPWeb-Klasse können Sie einen angegebenen Ordner zurückgeben. Dann können Sie auf einzelne Dateien im Ordner zugreifen. Nach der Instanziierung eines SPWeb-Objekts (z. B. als oWebsite) verwenden Sie SPFolder oFolder = oWebsite.GetFolder("Shared Documents") (in Microsoft Visual BasicDim oFolder As SPFolder = oWebsite.GetFolder("Shared Documents")), um den Ordner Freigegebene Dokumente für die Website zurückzugeben.

Beispiel

Im folgenden Beispiel wird eine Auflistung der Dateien im Ordner zurückgegeben, und es werden Informationen zu den Dateien angezeigt.

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();
    } 
}

Im vorherigen Beispiel wird die URL und die Größe jeder Datei in Freigegebene Dokumente aufgeführt.

Im Beispiel ist eine using-Direktive (Imports in Visual Basic) für den Microsoft.SharePoint-Namespace erforderlich.

Sie können Dateien in ein generisches List<T>-Objekt laden, um eine Auflistung zu erstellen. Im folgenden Beispiel werden alle Dateien aus der Liste Freigegebene Dokumente der aktuellen Website in den Unterordner StorageFolder verschoben, wobei alle Dateien mit demselben Namen, die sich in dem Ordner befinden, überschrieben werden.

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);
}

Im vorherigen Beispiel sind using-Direktiven (Imports in Visual Basic) für die Namespaces Microsoft.SharePoint und System.Collections.Generic erforderlich.

Verwenden Sie zum Kopieren von Dateien aus einem Speicherort in einen anderen eine der CopyTo()-Methoden der SPFile-Klasse. Im folgenden Beispiel werden alle Ordner und Dateien in einer Dokumentbibliothek aufgelistet und in eine andere Dokumentbibliothek kopiert. Der Button_Click-Ereignishandler durchläuft alle Dateien im Ordner auf oberster Ebene, wobei der Name und die Größe (in KB) jeder Datei aufgeführt werden, die ein Mehrfaches des Werts übersteigt, der in einem Textfeld vom Benutzer angegeben ist. Anschließend wird die CopyToTarget-Methode aufgerufen, um die Datei in einen angegebenen Ordner zu kopieren. Die EnumerateFolder-Methode durchläuft dann wiederholt alle Unterordner, und übergibt jede Dateiauflistung an die CopyToTarget-Methode. Im Beispiel wird das Vorhandensein von einer Schaltfläche, einer Bezeichnung und von drei Textfeldern zur Angabe der Dateigröße, des Quellordners und des Zielordners für den Vorgang vorausgesetzt.

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);
    }
}

In diesem Beispiel verwendet die CopyTo-Methode zwei Parameter: einen zur Angabe der Ziel-URL für die Datei, die kopiert wird. Und der andere Parameter ist ein Boolean-Wert, der angibt, ob Dateien mit demselben Namen, die sich am Ziel befinden, überschrieben werden.

Im vorherigen Beispiel sind using-Direktiven (Imports in Visual Basic) für die Namespaces Microsoft.SharePoint und Microsoft.SharePoint.Utilities erforderlich.

Siehe auch

Referenz

Microsoft.SharePoint

Konzepte

Arbeiten mit Listenobjekten und Auflistungen

Verwenden von Visual Studio für die SharePoint-Enwicklung

Sicherheitsüberprüfung und POSTs zum Aktualisieren von Daten

Rechteerweiterungen