2011-11-01 43 views
1

我通過FTP上傳文件是613.6 kb,它是一個PDF文件。當它到達服務器時,現在是82 KB。上傳後C#ASPX FTP文件大小錯誤

在我的web.config

我有

<httpRuntime executionTimeout="7200" maxRequestLength="2097151" requestValidationMode="2.0"/> 

我的代碼是這樣

void UploadFileToFtp(FileInfo file, FtpWebRequest req) 
    { 
     int buffLength = 2048; 

     using (var reader = new BinaryReader(file.OpenRead(), Encoding.Default)) 

     { 
      using (var writer = new BinaryWriter(req.GetRequestStream())) 
      { 
       while (reader.PeekChar() > 0) writer.Write(reader.ReadBytes(buffLength)); 
       writer.Flush(); 
       writer.Close(); 
      } 
      reader.Close(); 
     } 

    } 

我認爲它有一些東西做的編碼,所以我嘗試ASCII,默認和Unicode其中沒有做了一個差異。我加入了沖洗和關閉思考,但沒有幫助。我收到了關於編碼的錯誤,一旦我補充說錯誤消失了,但我沒有其他錯誤。

+3

是82 kb文件損壞,還是你仍然可以打開它? – jadarnel27

+0

腐敗,adobe不會發表它。 – StephanM

回答

5

難道是該文件包含零並且您的比較應該是reader.PeekChar() >=0而不是reader.PeekChar() > 0

+0

這是一個有效的PDF文件 – StephanM

+0

而且? PDF文件可以包含值爲0x00的字節。 –

+0

就是這樣,謝謝! – StephanM

0

你真的需要使用BinaryWriterBinaryReader,他們可能會做某種緩衝我不相信你需要這樣的緩衝。試試這個代碼,看看會發生什麼

var buffer = new byte[2048]; 
int bytesRead = 0; 
var reqStream = req.GetRequestStream(); 

using (var fs = file.OpenRead()) 
{ 
    while (0 < (bytesRead = fs.Read(buffer, 0, buffer.Length))) 
     reqStream.Write(buffer, 0, bytesRead); 
}