2012-01-18 16 views
0

私は1GBのような大きなデータを送受信するファイル転送アプリケーションを書いていますが、ファイルからデータを読み込み、RAMに格納されたバイト配列に書き込むと思いますそしてそれは、コンピュータの速度に影響を与えるだろう..私は好きですか必要があります。大きなファイルサイズを読み書きする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

も、128メガバイトは良い方法ではありません...その良いことを送った後..小さなバッファを読むためにある場合反対側にまっすぐ

これをチェックしてください。

あなたは、これは(サーバー/クライアント)

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

Sendメソッド

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; 
      } 
     } 
    } 

受信方法に共通する必要があります

反対側に、fileNameとファイルサイズを送信した後:

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. 1MBで1MB。これは、Windowsのバージョン、ネットワークドライバ、ユーザーの靴サイズ、ムーンフェイズによって異なります。 1 MB以下であれば問題ありません。

だから、どちらか

(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がないので ができませんでした。他の側からファイルを受け取る方法を知ることができませんでした..ファイルの最後まで、 .. !!何か考えているのですか? –

関連する問題