Compartir a través de


Procedimiento para copiar, mover y obtener acceso a archivos

Puede usar el método GetFolder de la clase SPWeb para devolver una carpeta especificada y, a continuación, tener acceso a archivos individuales de la carpeta. Tras crear instancias de un objeto SPWeb (por ejemplo, como miSitio), use SPFolder myFolder = mySite.GetFolder("Shared Documents") (en Visual Basic 2005, use Dim myFolder As SPFolder = mySite.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.

Dim myFiles As SPFileCollection = myFolder.Files
Dim file As SPFile

For Each file In  myFiles

    Response.Write(file.Url.ToString() & "<BR>")
    Response.Write(file.Length.ToString() & "<BR>")

Next file
SPFileCollection myFiles = myFolder.Files;

foreach (SPFile file in myFiles)
{
   Response.Write(file.Url.ToString() + "<BR>");
   Response.Write(file.Length.ToString() + "<BR>");
}

En el ejemplo anterior, se enumeran la dirección URL y el tamaño de cada archivo dentro de la carpeta.

En el ejemplo, se requieren directivas using (Imports en Visual Basic) para el espacio de nombres Microsoft.SharePoint.

Para copiar archivos de una ubicación a otra, use uno de los métodos CopyTo de la clase SPFile. En el ejemplo siguiente, el controlador de eventos Page_Load crea una instancia para un objeto SPWeb para el contexto del sitio actual. El controlador de eventos Click recorre en iteración todos los archivos de la carpeta, enumerando 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, copia el archivo en una carpeta denominada Archivo.

Private mySite As SPWeb

Private Sub Page_Load(sender As Object, e As System.EventArgs)

    mySite = SPControl.GetContextWeb(Context)

End Sub 'Page_Load

Private Sub Button1_Click(sender As Object, e As System.EventArgs)

    Dim maxSize As Integer = Convert.ToInt32(TextBox1.Text)
    Dim myFolder As SPFolder = mySite.GetFolder("Shared Documents")
    Dim myFiles As SPFileCollection = myFolder.Files
    Dim file As SPFile

    For Each file In  myFiles

        If file.Length > maxSize * 1024 Then

            Response.Write(SPEncode.HtmlEncode(file.Name) & " :: " 
                & file.Length / 1024 & "kb<BR>")
            file.CopyTo("Archive/" & file.Name, True)

        End If

    Next file

End Sub 'Button1_Click
private SPWeb mySite;

private void Page_Load(object sender, System.EventArgs e)
{
   mySite = SPControl.GetContextWeb(Context);
}

private void Button1_Click(object sender, System.EventArgs e)
{
   int maxSize = Convert.ToInt32(TextBox1.Text);

   SPFolder myFolder = mySite.GetFolder("Shared Documents");
   SPFileCollection myFiles = myFolder.Files;

   foreach (SPFile file in myFiles)
   {

      if (file.Length>(maxSize*1024))
      {
         Response.Write(SPEncode.HtmlEncode(file.Name) + ": " 
             + file.Length/1024 + "kb<BR>");
         file.CopyTo("Archive/" + file.Name, true);
      }
   }
}

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

El ejemplo anterior requiere directivas using (Imports en Visual Basic) para los espacios de nombres Microsoft.SharePoint, Microsoft.SharePoint.Utilities y Microsoft.SharePoint.WebControls.

En el siguiente ejemplo, se mueven todos los archivos de la lista de documentos compartidos del sitio actual a otra carpeta denominada StorageFolder, y se sobrescribe cualquier archivo con el mismo nombre que pueda encontrarse en dicha carpeta.

Dim mySite As SPWeb = SPControl.GetContextWeb(Context)
Dim myFolder As SPFolder = mySite.GetFolder("Shared Documents")
Dim myFiles As SPFileCollection = myFolder.Files
Dim i As Integer

For i = myFiles.Count - 1 To 0 Step -1

    myFiles(i).MoveTo("StorageFolder/" & myFiles(i).Name, True)

Next i
SPWeb mySite = SPControl.GetContextWeb(Context);
SPFolder myFolder = mySite.GetFolder("Shared Documents");
SPFileCollection myFiles = myFolder.Files;

for (int i = myFiles.Count - 1; i > -1; i--)
{
    myFiles[i].MoveTo("StorageFolder/" + myFiles[i].Name, true);
}

Como se muestra en el ejemplo, cuando se modifican las colecciones en el transcurso de la ejecución de código al eliminar o mover elementos, debe reducirse el valor del contador para recorrer en iteración la colección con cada iteración.

El ejemplo anterior requiere directivas using (Imports en Visual Basic) para los espacios de nombres Microsoft.SharePoint y Microsoft.SharePoint.WebControls.

Vea también

Referencia

Microsoft.SharePoint

Otros recursos

Trabajar con objetos de listas y colecciones
Introducción a la personalización mediante programación de un sitio web de SharePoint en Visual Studio
Validación de seguridad y realización de envíos para actualizar datos
Concesión de privilegio