簡體   English   中英

如何在C#中動態聲明大文件的字節數組

[英]How to declare byte array dynamically in c# for large files

我正在嘗試將SharePoint文檔庫中的文檔轉換為靜態WCF服務中的字節數組。 當我聲明最大大小的字節數組時,我得到的文件大小是我聲明的最大大小。 我需要知道如何動態聲明字節數組。

下面是我的代碼:

using (CSOM.ClientContext clientContext = new CSOM.ClientContext(SPserverUrl))
{
    DocumentID = "229"; 
    clientContext.Credentials = new System.Net.NetworkCredential(@"username", "pwd", "domain");
    CSOM.Web _Site = clientContext.Web;
    CSOM.List _List = _Site.Lists.GetByTitle("TestFiles");
    CSOM.ListItem listItem = _List.GetItemById(Convert.ToInt32(DocumentID));
    clientContext.Load(_List);
    clientContext.Load(listItem, i => i.File);
    clientContext.ExecuteQuery();           
    var fileRef = listItem.File.ServerRelativeUrl;
    var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, fileRef);
    byte[] buffer = new byte[9469417];
    // how to declare the above byte array dynamically with the file size dynamically
    using (MemoryStream memoryStream = new MemoryStream())
    {

        int bytesRead;
        do
        {
            bytesRead = fileInfo.Stream.Read(buffer, 0, buffer.Length);
            memoryStream.Write(buffer, 0, bytesRead);
        } while (bytesRead != 0);

        string base64 = Convert.ToBase64String(buffer);

    }
}

我從下面的鏈接獲得了解決方案

http://ranaictiu-technicalblog.blogspot.co.uk/2010/06/sharepoint-2010-attach-files-to.html

               var fileRef = listItem.File.ServerRelativeUrl;
              var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, fileRef);
                var stream = fileInfo.Stream;
                IList<byte> content = new List<byte>();
                int b;
                while ((b = fileInfo.Stream.ReadByte()) != -1)
                {
                    content.Add((byte)b);
                }
                byte[] barray = content.ToArray();

您的緩沖區根本不需要與文件大小相同。 您僅將其用作臨時存儲,將輸入文件的一部分復制到輸出MemoryStream

我個人會使用16K之類的大小-大小不足以容納大型對象堆,但又不能太小以至於您最終會進行許多微小的IO操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM