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