2012-01-18 2 views
0

im для записи приложения передачи файлов для отправки и получения больших данных, таких как 1 ГБ .. но я думаю, когда я прочитаю данные из файла и запишу его в массив байтов, который он хранит в ОЗУ и это будет влиять на скорость компьютера .. я должен делать нравится:чтение и запись большого размера файла C#

(loop till end of the file) 
{ 
    read 128 MB from the file into byte array 
    (loop till end of 128) 
    { 
     send 1 kb to server 
    } 
    byte array = null 
} 

если это право .. что лучше делать !! beginSend и BeginReceive отправить большой файл или просто цикл, чтобы отправить файл

я бы рад, если вы научите меня с каким-то кодом заранее спасибо :)

ответ

0

даже 128mb не хороший способ .. лучше, чтобы прочитать небольшой буфер .. затем отправить его прямо на другую сторону

проверить.

после отправки FileName и FileSize на другую сторону

это должно быть распространено в (сервер/клиент)

FileStream fs; 
NetworkStream network; 
int packetSize = 1024*8; 

Отправить метод

public void Send(string srcPath, string destPath) 
    { 
     byte data; 
     string dest = Path.Combine(destPath, Path.GetFileName(srcPath)); 
     using (fs = new FileStream(srcPath, FileMode.Open, FileAccess.Read)) 
     { 
      try 
      { 
       long fileSize = fs.Length; 
       long sum = 0; 
       int count = 0; 
       data = new byte[packetSize]; 
       while (sum < fileSize) 
       { 
        count = fs.Read(data, 0, packetSize); 
        network.Write(data, 0, count); 
        sum += count; 
       } 
       network.Flush(); 
      } 
      finally 
      { 
       fs.Dispose(); 
       data = null; 
      } 
     } 
    } 

получающего метод:

public void Receive(string destPath, long fileSize) 
    { 
     byte data; 
     using (fs = new FileStream(destPath, FileMode.Create, FileAccess.Write)) 
     { 
      try 
      { 
       int count = 0; 
       long sum = 0; 
       data = new byte[packetSize]; 
       while (sum < fileSize) 
       { 
        count = network.Read(data, 0, packetSize); 
        fs.Write(data, 0, count); 
        sum += count; 
       } 
      } 
      finally 
      { 
       fs.Dispose(); 
       data = null; 
      } 
     } 
    } 
0

Windows, будет вести себя странно, если вы [начать ] Отправить больше, чем ca. 1 МБ за один раз. Это отличается от версий Windows, сетевых драйверов, размера обуви пользователя и фазы луны. Ниже 1 МБ вы должны быть в порядке.

Таким образом, либо

(loop till end of the file) 
{ 
    read 128 MB from the file into byte array 
    (loop till end of 128) 
    { 
     send 1 MB to server 
    } 
    byte array = null 
} 

или, если это действительно файлу

SendFile(filename[,...]) 
+0

на самом деле .. я пытался выяснить, как работает SendFile, но я не мог , потому что нет ReceiveFile .. поэтому я не мог узнать, как получить файл с другой стороны .. он отправляет путем циклирования до конца файла или того, какой буфер он использует .. !! У тебя есть идея? –

Смежные вопросы