2011-10-20 26 views
0

私はvb.netを使用してasp.net webforms Webサイトを開発しています。リンクとしてグリッドビューに表示されるファイルのリストでは、リンク上でクリックすると、OpenFileメソッドが呼び出されます。ウェブ上で見つけたこのコードは、Webサーバーに保存されているファイルをクライアントにダウンロードするために使用されていますが、これは正常に動作しますが、.docxファイルや.xlsxファイルをダウンロードしようとすると、 という行に"Response.BinaryWrite(btFile)"というエラーが発生しますが、は、。下記の実際のコードのshortendバージョンであるResponse.BinaryWrite()のSystem.ArgumentOutOfRangeException

ページコード:

Protected Sub grvItemAttachments_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grvItemAttachments.RowCommand 
    Try 
     If e.CommandName = "Open" Then 
      FileOpener.OpenFile(fileNameWithPath) 
     End If 
    Catch ex As Exception 
     ErrHandler.WriteError(ex.Message) 
    End Try 
End Sub 

ファイルオープナーコード:

Public Shared Sub OpenFile(fileNameWithPath as string) 
    Dim file As New FileInfo(fileNameWithPath) 
    Dim fs As System.IO.FileStream = Nothing 
    fs = System.IO.File.Open(fileNameWithPath, System.IO.FileMode.Open) 
    Dim btFile As Byte() = New Byte(fs.Length - 1) {} 
    fs.Read(btFile, 0, Convert.ToInt32(fs.Length)) 
    fs.Close() 
    Response.AddHeader("Content-disposition", "attachment; filename=" & FileName) 
    Response.ContentType = GetFileType(file.Extension.ToLower()) 
    Response.BinaryWrite(btFile) 
    Response.End() 
End Sub 

エラーメッセージ:

System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values." & vbCrLf & "Parameter name: offset" & vbCrLf & " at System.Web.HttpResponseStream.Write(Byte[] buffer, Int32 offset, Int32 count)" & vbCrLf & " at System.Web.HttpResponse.BinaryWrite(Byte[] buffer)" & vbCrLf & " at FileOpener.OpenFile(String FileName, String FolderName) in D:\Projects\VSS Projects\PIL WebSite\App_Code\Common\FileOpener.vb:line 25" & vbCrLf & " at Web_RTOView.grvItemAttachments_RowCommand(Object sender, GridViewCommandEventArgs e) in D:\Projects\VSS Projects\PIL WebSite\Web\RTOView.aspx.vb:line 310} 
------ 
grvItemAttachments_RowCommand 
Error Message: Specified argument was out of the range of valid values. 
Parameter name: offset 

任意のアイデアどのようにこの問題を解決するには問題?

答えて

1

バイト配列をLength-1に初期化するのはなぜですか? Lengthと正確なサイズではないでしょうか? 実際には、ファイルの内容を0から長さまで読み込もうとしますが、バイト配列lengthLength-1

+0

です。問題が解決しました。 – Nalaka526

関連する問題