2016-03-04 47 views
0

我正在嘗試編寫一個程序,將文件傳輸到SharePoint,我正在使用Filestream,因爲這將從文件服務器中提取服務器。我有困難連接Path.Getfilename(filename)Microsoft.SharePoint.Client.File.SaverBinaryDirect(context,"",fs,true);內的文字字符串我更像是一個管理員而不是程序員。任何幫助都會很棒。連接Path.Getfilename(文件名)將文件上傳到SharePoint

class Program 
{ 
    static void Main(string[] args) 
    { 
     ClientContext context = new ClientContext("https://company.sharepoint.com"); 
     { 
      SecureString password = new SecureString(); 
      foreach (char c in "Password") 
      password.AppendChar(c); 
      context.Credentials = new SharePointOnlineCredentials("UserEmail", password); 
      context.ExecuteQuery(); 
      Console.WriteLine("File Transfer is Complete"); 
     } 

     string[] fileEntries = Directory.GetFiles(@"\\directorypath"); 
     foreach (string fileName in fileEntries) 
     { 
      Console.WriteLine(fileName); 
      Console.WriteLine(Path.GetFileName(fileName)); 
      using (FileStream fs = new FileStream(fileName, FileMode.Open)) 
      { 
       Path.Combine(fileName,Path.GetFileName(fileName.Replace("/sites/Name ofSite/documentlibrary/", ""))); 
       Microsoft.SharePoint.Client.File.SaveBinaryDirect(context, "", fs, true); 
      } 


     } 
    } 
} 
+0

[與string.replace](https://msdn.microsoft.com/library/fk49wtc1.aspx)返回一個新的'string'和沒有按」 t改變它使用的'string'。看起來你想從'filename'替換(刪除)路徑信息,但是你把它放到[Path.GetFileName](https://msdn.microsoft.com/library/system.io.path.getfilename.aspx)中,這已經爲你做了,所以只需使用'Path.GetFileName(filename)'。問題是,你爲什麼試圖將(整個)'filename'與'filename'的FileName部分結合?結果看起來像'「c:\ path \ subpath \ file.ext \ file.ext」'。 – Corak

+0

您能否給出一個完整的路徑和文件名以及想要獲得的結果的例子(匿名)? – Corak

+0

我試圖從一臺服務器上將多個文件拖入Sharepoint, – user2350911

回答

0

File.SaveBinaryDirect Method預計,serverRelativeUrl參數表示文件的對於服務器的URL字符串,例如:

/site/web/documents/file.zip 

構建文件服務器相對URL你可以結合列表/庫服務器相關的url和文件名:

using (var fs = new FileStream(fileName, FileMode.Open)) 
{ 
    var fileUrl = "/site/web/documents/" + Path.GetFileName(fileName); 
    Microsoft.SharePoint.Client.File.SaveBinaryDirect(ctx, fileUrl, fs, true); 
} 

變形例

static void Main(string[] args) 
    { 
     //source settings (local file system) 
     var sourcePath = @"C:\Users\jdoe\Documents"; 

     //target settings (SharePoint Online) 
     var webUrl = "https://contoso.sharepoint.com/"; 
     var username = "[email protected]"; 
     var password = "password"; 
     var targetListTitle = "Documents"; 

     var fileNames = Directory.GetFiles(sourcePath); //retrieve source files 

     using (var ctx = GetContext(webUrl, username, password)) 
     { 

      //prepare target list 
      var targetList = ctx.Web.Lists.GetByTitle(targetListTitle); 
      ctx.Load(targetList, l => l.RootFolder.ServerRelativeUrl); 
      ctx.ExecuteQuery(); 


      foreach (var fileName in fileNames) 
      { 
       using (var fs = new FileStream(fileName, FileMode.Open)) 
       { 
        var fileUrl = targetList.RootFolder.ServerRelativeUrl + "/" + Path.GetFileName(fileName); 
        Microsoft.SharePoint.Client.File.SaveBinaryDirect(ctx, fileUrl, fs, true); 
       } 
      } 
     } 
    } 

其中

private static ClientContext GetContext(string url,string username, string password) 
    { 
     var ctx = new ClientContext(url); 
     var securePassword = new SecureString(); 
     foreach (char c in password) securePassword.AppendChar(c); 
     ctx.Credentials = new SharePointOnlineCredentials(username, securePassword); 
     return ctx; 
    }