Сохранение SPFile на локальный жесткий диск - PullRequest
5 голосов
/ 11 марта 2011

Я пытаюсь получить файл с sharepoint на локальный жесткий диск.

Вот мой код:

SPFile file = web.GetFile("http://localhost/Basics.pptx");                
byte[] data = file.OpenBinary();
FileStream fs = new FileStream(@"C:\Users\krg\Desktop\xyz.pptx",FileMode.Create,FileAccess.Write);

BinaryWriter w = new BinaryWriter(fs);            
w.Write(data, 0, (int)file.Length);            
w.Close();            
fs.Close();

Когда я пытаюсь открыть этот файл, он отображается как поврежденный файл.

Исходный размер файла составляет 186 КБ, после загрузки размер файла составляет 191 КБ.

Какое решение загрузить файл с sharepoint ..?

Ответы [ 2 ]

13 голосов
/ 08 июня 2011

Просто небольшой вклад в этот ответ. Лучше проверить количество байтов, прочитанных в каждом блоке, чтобы записанный поток был точной копией потока, считанного из SharePoint. См. Исправление ниже.

int size = 10 * 1024;
using (Stream stream = file.OpenBinaryStream())
{  
 using (FileStream fs = new FileStream(@"C:\Users\krg\Desktop\xyz.pptx", FileMode.Create, FileAccess.Write))
 {
   byte[] buffer = new byte[size];
   int nbBytesRead =0;
   while((nbBytesRead=stream.Read(buffer, 0, buffer.Length)) > 0) 
   {
      fs.Write(buffer, 0, nBytesRead);
   }
 }
}
4 голосов
/ 11 марта 2011

Вам не нужен BinaryWriter:

int size = 10 * 1024;
using (Stream stream = file.OpenBinaryStream())
{
  using (FileStream fs = new FileStream(@"C:\Users\krg\Desktop\xyz.pptx", FileMode.Create, FileAccess.Write))
  {
    byte[] buffer = new byte[size];
    int bytesRead;
    while((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
    {
      fs.Write(buffer, 0, bytesRead);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...