Sharepoint 2010 client object model with camlQuery - file download but no content / 0 byte

16,765

Try this:

using FileInformation and get the MemoryStream

string fileurl = (string)liitem["FileRef"];
FileInformation ffl = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, fileurl);
byte[] bytesarr = ReadFully(ffl.Stream);
MemoryStream mnm = new MemoryStream(bytesarr);

ReadFully function which converts Stream to Bytes array

 public byte[] ReadFully(Stream input)
    {
        byte[] buffer = new byte[16 * 1024];
        using (MemoryStream ms = new MemoryStream())
        {
            int read;
            while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, read);
            }
            return ms.ToArray();
        }
    }
Share:
16,765
float
Author by

float

Updated on June 18, 2022

Comments

  • float
    float almost 2 years

    I'm trying to download a txt file from a subfolder within a folder in a document library.

    I'm using camlQuery to achieve this. Unfortunately, i get no content of the txt file. It has 0 byte.

    public void SaveFolderFiles(string fileName, string libraryName, ClientOM.ClientContext clientContext)
        {
            ClientOM.List sharedDocumentsList = clientContext.Web.Lists.GetByTitle(libraryName);
            ClientOM.CamlQuery camlQuery = new ClientOM.CamlQuery();
            camlQuery.FolderServerRelativeUrl = "/Site/Folder/Folder2010/";
            camlQuery.ViewXml =
                @"<View>
                <Query>
                  <Where>
                    <Eq>
                      <FieldRef Name='FileLeafRef'/>
                      <Value Type='Text'>" + fileName + @"</Value>
                    </Eq>
                  </Where>
                  <RowLimit>1</RowLimit>
                </Query>
              </View>";
            ClientOM.ListItemCollection listItems = sharedDocumentsList.GetItems(camlQuery);
            clientContext.Load(sharedDocumentsList);
            clientContext.Load(listItems);
            clientContext.ExecuteQuery();
            if (listItems.Count == 1)
            {
                ClientOM.ListItem item = listItems[0];
                Console.WriteLine("FileLeafRef: {0}", item["FileLeafRef"]);
                Console.WriteLine("FileDirRef: {0}", item["FileDirRef"]);
                Console.WriteLine("FileRef: {0}", item["FileRef"]);
                Console.WriteLine("File Type: {0}", item["File_x0020_Type"]);
                ClientOM.FileInformation fileInformation = ClientOM.File.OpenBinaryDirect(clientContext, (string)item["FileRef"]);
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    fileInformation.Stream.CopyTo(memoryStream);
                    using (FileStream fileStream = File.Create(@"D:\" + item["FileLeafRef"].ToString()))
                    {
                        memoryStream.CopyTo(fileStream);
                    }
                    memoryStream.Flush();
                }
    
    
            }
            else
            {
                Console.WriteLine("Document not found.");
            }
        }
    

    Maybe someone has an idea?

    Regards