现在的位置: 首页 > 综合 > 正文

WSS3SDK之:如何读取,拷贝和移动文件

2012年05月12日 ⁄ 综合 ⁄ 共 3030字 ⁄ 字号 评论关闭
我们可以通过SPWeb类的GetFolder方法返回某个特定的文件夹,然后访问其中某个文件。在实例化SPWeb对象后(如mySite),使用SPFolder myFolder=mySite.GetFolder("Shared Documents")(对于VB 2005为 Dim myFolder As SPFolder = mySite.GetFolder("Shared Documents"))来返回网站中的共享文档(Shared Documents)文件夹。
下面的例子返回文件夹中文件的集合,并显示文件信息。
VB

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

C#

SPFileCollection myFiles = myFolder.Files;

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

上面的例子列出了文件夹中每个文件的URL和大小。
我们需要引用Microsoft.SharePoint命名空间。
如果要把文件从一个位置拷贝到别的地方,可以使用SPFile类的CopyTo方法。下面的例子在Page_Load事件处理程序中实例化了当前站点上下文的SPWeb对象。在Click事件处理程序中,遍历了整个文件夹,列出各文件的文件名和大小(以kb为单位),对于大小超过用户在textbox中指定值的文件,将拷贝一份到Archive文件夹。
VB

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

C#

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

该例中,CopyTo方法有两个参数,一个指定拷贝的目标URL地址,另一个布尔值用于指定是否覆盖目标文件夹中已有的同名文件。
您需要引用Microsoft.SharePoint,Microsoft.SharePoint.Utilities,Microsoft.SharePoint.WebControls命名空间。
下面的例子将移动共享文档(Shared Documents)中的所有文件夹到名为StorageFolder文件夹,并覆盖已存在的同名文件。
VB

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

C#

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

如上所示,当集合由于代码执行删除或移动项目而改变时,用于遍历集合的计数器必须采用递减。
该代码的运行需要引用Microsoft.SharePoint和Microsoft.SharePoint.WebControls命名空间。

【上篇】
【下篇】

抱歉!评论已关闭.