- PR -

LZHファイルだけダウンロードできない。

1
投稿者投稿内容
いしさん
会議室デビュー日: 2005/06/01
投稿数: 3
投稿日時: 2005-06-01 19:17
はじめまして。 ASP.NETの初心者ですよろしくお願いします。

以下のコードで各ファイルのダウンロード機能を実現しようとしていますが
LZHファイルだけFileStreamの部分でエラーとなりダウンロードできません。
いろいろ調べましたが分かりませんでした。
どなたか良い知恵がありましたらお教え下さい。

---------------コードの始まり-----------------------
Try
Response.Buffer = True
Response.Clear()

If InStr(Request.ServerVariables("HTTP_USER_AGENT"), " MSIE 5.5;") > 0 Then
'--- IE 5.5 の場合の回避策
Response.ContentType = "application/octet-stream-dummy"
Else
'--- その他のブラウザ
sSuffix = ""
n = InStrRev(m_sFilePath, ".")
If n > 0 Then
sSuffix = Mid(m_sFilePath, n).ToUpper
End If

Try
MyFileStream = New FileStream(m_sFilePath, FileMode.Open, FileAccess.Read)
FileSize = MyFileStream.Length
Catch eSys As Exception
Dim sErr As String = "ファイル読み込みエラー"
Throw New ApplicationException(sErr, eSys)
Return False
Finally
If Not MyFileStream Is Nothing Then MyFileStream.Close()
End Try

Select Case sSuffix
Case ".XLS" 'ダウンロードできる
Response.ContentType = "application/vnd.ms-excel"
Exit Select
Case ".CSV"   'ダウンロードできる 
Response.ContentType = "application/csv"
Exit Select
Case ".TXT" 'ダウンロードできる
Response.ContentType = "txt/plain"
Exit Select
Case ".PPT" 'ダウンロードできる
Response.ContentType = "application/vnd.ms-powerpoint"
Exit Select
Case ".DOC" 'ダウンロードできる
Response.ContentType = "application/vnd.msword"
Exit Select
Case ".XML" 'ダウンロードできる
Response.ContentType = "application/xml"
Exit Select
Case ".PDF" 'ダウンロードできる
Response.ContentType = "application/pdf"
Exit Select
Case ".LZH" 'ダウンロードできない★
Response.ContentType = "application/octet-stream"
Exit Select
Case ".ZIP" 'ダウンロードできる
Response.ContentType = "application/zip"
Exit Select
End Select
End If
Response.AddHeader("Content-Disposition", "Attachment; filename=" & HttpUtility.UrlEncode(m_sFileName))
Response.AddHeader("Content-Length", FileSize)
Response.WriteFile(m_sFilePath)
Response.Flush()
Response.Close()
Catch eSys As Exception
Dim sErr As String = "Web出力エラー"
Response.StatusCode = 404
Throw New ApplicationException(sErr, eSys)
Return False
End Try
---------------コードの終わり-----------------------
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-06-01 21:22
引用:

いしさんさんの書き込み (2005-06-01 19:17) より:

LZHファイルだけFileStreamの部分でエラーとなりダウンロードできません。
いろいろ調べましたが分かりませんでした。


 どんなエラーになりますか、エラー(例外)の種類、せっかく受けているのだからMessageの内容を書いてください。それが一番重要な情報です。

 『色々調べた』ことを、具体的に挙げてください。すでに調べたことを指摘されても困りますよね?書いてなければ「していない」と判断されます。
_________________
いしさん
会議室デビュー日: 2005/06/01
投稿数: 3
投稿日時: 2005-06-02 10:26
>どんなエラーになりますか、エラー(例外)の種類、せっかく受けているのだからMessageの
>内容を書いてください。それが一番重要な情報です。

未処理の実行エラー
パス "C:\〜\〜\TestData\test.lzh" へのアクセスが拒否されました。
のエラーとなります。

ダウンロードできるXLS,CSV,TXT,PPT,DOC,XML,PDF,ZIPのダウンロードファイルと
同一のディレクトリにLZHファイルは存在しております。
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-06-02 10:40
いしさん

そのエラーの通り、"ファイルに"アクセス権がないのではないでしょうか。
プロパティのアクセス権をダウンロード可能な他のファイルと比較してみて下さい。

蛇足ですが、LZHファイルはどの様にして"C:\\〜\\〜\\TestData"フォルダに配置していますか?
VB6での話ですが、Unlha.dllを使用して直接ダウンロード用フォルダにLZHファイルを作成すると、アクセス権がEveryOneだけになったことがあります。
そのときは、[テンポラリフォルダでファイル作成]→[ダウンロード用フォルダへコピー]の手順で正常にアクセス権を付与することができました。

がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2005-06-02 10:43
どもです。がると申します。
んっと。デバッグの基本は「絞込み」です。
「どこでバグが起きたか」をぎりぎりまで絞り込むと、その後がとても
楽になります。
んで。

引用:

未処理の実行エラー
パス "C:\〜\〜\TestData\test.lzh" へのアクセスが拒否されました。
のエラーとなります。


から推測するに。まずはファイルのopen周りと、ファイルのread周り。
あとは「どこで例外が発生しているかを行レベルで正確に把握」できるように
工夫してみましょう。

そうすれば、もう少し状況がはっきりするかとは思います。
この手法は今回に限らずデバッグの基礎になるので、初めはちょっと
大変だと思いますが、がんばってください。
いしさん
会議室デビュー日: 2005/06/01
投稿数: 3
投稿日時: 2005-06-02 12:31
でっち6号さん

>プロパティのアクセス権をダウンロード可能な他のファイルと比較してみて下さい。

他のファイルは全てアクセス権がEveryOneでした。
またLZHファイルのアクセス権はAdministrators,ログインユーザ,SYSTEMになって
いました。
ここで、LZHファイルのアクセスをEveryOneと変更したところ
ファイルのダイアログボックスが表示されました。

Jittaさん
でっち6号さん
がるがるさん
     ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)