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
Try this:
using
FileInformation
and get the MemoryStreamReadFully function which converts
Stream
toBytes array
Export straight to output file ... I think this is the easiest and simplest way of doing it.