2010-12-21 74 views

回答

1

以资源管理器模式打开文档库从一个位置复制它在资源管理器视图中打开其他库在其上粘贴。

+0

所有文档历史记录都将丢失这样做的时候,不是吗?如何保存? – Marc 2012-11-15 07:45:33

1

如果您需要以通用的方式以编程方式执行此操作,则可以使用将文件夹(或整个文档库)的内容写入文件系统的功能,以及将文件导入其他任何文档的另一功能图书馆。

要出口:

void ExtractFolder(SPFolder spFolder, String systemFolder) 
{ 
    String destinationFolder = Path.Combine(systemFolder, spFolder.Name); 

    Directory.CreateDirectory(destinationFolder); 

    foreach (SPFile file in spFolder.Files) 
    { 
     String fileLocation = Path.Combine(destinationFolder, file.Name); 
     byte[] binaryFile = file.OpenBinary(); 

     using (FileStream fs = new FileStream(fileLocation, FileMode.OpenOrCreate, FileAccess.Write)) 
      { 
        fs.Write(binaryFile, 0, binaryFile.Length); 
        fs.Close(); 
      } 
     } 
     foreach (SPFolder subfolder in spFolder.SubFolders) 
     { 
      ExtractFolder(subfolder, destinationFolder); 
     } 
    } 

导入:

void ImportListFromFolder(SPFolder spFolder, String systemFolder) 
{ 
    ImportFilesToFolder(spFolder, systemFolder); 

    DirectoryInfo directoryInfo = new DirectoryInfo(systemFolder); 

    foreach (DirectoryInfo subDirectory in directoryInfo.GetDirectories()) 
    { 
     SPFolder subfolder = spFolder.SubFolders.Add(subDirectory.Name); 
     ImportListFromFolder(subfolder, subDirectory.FullName); 
    } 
} 

void ImportFilesToFolder(SPFolder spFolder, string systemFolder) 
{ 
    String fileMask = "*.*"; 

    DirectoryInfo directoryInfo = new DirectoryInfo(systemFolder); 

    foreach (FileInfo fileInfo in directoryInfo.GetFiles(fileMask)) 
    { 
      byte[] buffer = new byte[fileInfo.Length]; 
      using (FileStream fs = new FileStream(fileInfo.FullName, System.IO.FileMode.Open)) 
      { 
       fs.Read(buffer, 0, (int)fileInfo.Length); 
       fs.Close(); 
      } 

      SPFile addedFile = spFolder.Files.Add(fileInfo.Name, buffer, false); 

     } 
    } 
相关问题