Compartir a través de


Procedimiento para copiar, mover y obtener acceso a archivos

Última modificación: lunes, 12 de abril de 2010

Hace referencia a: SharePoint Foundation 2010

Disponible en SharePoint Online

Para recuperar archivos y carpetas de un sitio web, use el método GetFile()o GetFolder() de la clase SPWeb.

Puede usar el método GetFolder de la clase SPWeb para devolver una carpeta especificada. A continuación, puede tener acceso a archivos individuales de la carpeta. Tras crear instancias de un objeto SPWeb (por ejemplo, oWebsite), use SPFolder oFolder = oWebsite.GetFolder("Shared Documents") (en Microsoft Visual Basic, use Dim oFolder As SPFolder = oWebsite.GetFolder("Shared Documents")) para devolver la carpeta Documentos compartidos del sitio.

Ejemplo

El ejemplo siguiente devuelve la colección de archivos de la carpeta y muestra información acerca de los mismos.

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

En el ejemplo anterior se enumeran la dirección URL y el tamaño de cada archivo contenido en Documentos compartidos.

El ejemplo requiere una directiva using (Imports en Visual Basic) para el espacio de nombres Microsoft.SharePoint.

Puede cargar archivos a un objeto List<T> genérico para enumerar una colección. En el siguiente ejemplo, se mueven todos los archivos de la lista Documentos compartidos del sitio actual a una subcarpeta denominada StorageFolder y se sobrescribe cualquier archivo con el mismo nombre que se encuentre en dicha carpeta.

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

En el ejemplo anterior se requieren directivas using (Imports en Visual Basic) para los espacios de nombres Microsoft.SharePoint y System.Collections.Generic.

Para copiar archivos de una ubicación a otra, use uno de los métodos CopyTo() de la clase SPFile. En el ejemplo siguiente, se enumeran todas las carpetas y los archivos de una biblioteca de documentos y se copian a otra biblioteca de documentos. El controlador de eventos Button_Click procesa una iteración en todos los archivos de la carpeta de primer nivel y enumera el nombre y el tamaño (en kilobytes) de cada archivo que supere un múltiplo del valor especificado por el usuario en un cuadro de texto. A continuación, llama al método CopyToTarget para copiar el archivo a una carpeta específica. A continuación, el método EnumerateFolder procesa una iteración de forma recursiva en todas las subcarpetas y pasa cada colección de archivos al método CopyToTarget. En el ejemplo se supone que hay un botón, una etiqueta y tres cuadros de texto que especifican un tamaño de archivo, una carpeta de origen y una carpeta de destino para la operación.

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

En el ejemplo, el método CopyTo usa dos parámetros: uno especifica la dirección URL de destino del archivo que se copia y el otro es un valor booleano que especifica si se va a sobrescribir algún archivo con el mismo nombre que se encuentre en el destino.

En el ejemplo anterior se requieren directivas using (Imports en Visual Basic) para los espacios de nombres Microsoft.SharePoint y Microsoft.SharePoint.Utilities.

Vea también

Referencia

Microsoft.SharePoint

Conceptos

Trabajar con objetos de listas y colecciones

Uso de Visual Studio para el desarrollo de SharePoint

Validación de seguridad y realización de envíos para actualizar datos

Concesión de privilegio