C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: フォルダー内のエクセル名とそのリンクの表示方を教えてください


(過去ログ 48 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■26003 / inTopicNo.1)  フォルダー内のエクセル名とそのリンクの表示方を教えてください
  
□投稿者/ あびお27 (1回)-(2008/09/30(Tue) 10:08:39)

分類:[.NET 全般] 

はじめまして、こんにちは。
あびお27と申します。
開発環境はVS2005,言語はVBです。

現在
1.ログイン画面表示
2.ログイン後指定されたDirectoryの下にあるフォルダー内のエクセルファイル名とそのリンクを表示
3.ユーザーがリンクをクリックすると、そのエクセルファイルが開く
という内容のサイトを作成しようとしています。

http://aspnet101.com/aspnet101/tutorials.aspx?id=12
上記サイトを見つけましたので、コードをコピーペーストしたのですが
Dim drives As String() = Directory.GetLogicalDrives()の部分で
「名前'Directory'は宣言されていません」というエラーがでます。
Dim drives() As IO.DriveInfo = System.IO.DriveInfo.GetDrivesに変更するとエラーはなくなりましたが
これで自分の欲しい情報が取れるのか謎です。(GetLogicalDrivesが選択として出てきませんでした)。

また、
sDriveList += "<span class=""dobig"">...の列で
「演算子'&'は、型'String'および'System.IO.DriveInfo'に対して定義されていません」という
エラーが出てしまいます。

そこで、このコードは諦めて下記のようにListBoxに表示されるようにしました。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
For Each File As String In System.IO.Directory.GetFiles("<フォルダーのロケーションを定義しています。>")
ListBox1.Items.Add(File.Substring(File.LastIndexOf("\") + 1))
Next
End Sub

これはうまくファイルがリストアップされるのですが、そのファイル名をどのようにリンク表示することができるのか
サンプルなどを探し出すことができません。
できれば、ListBoxにではなく、GridViewのような感じで表示する事ができると良いなと思っています。

大変初歩的な質問で恐縮ですが、どなたかアドバイスをしていただけると大変助かります。

どうぞよろしくお願い致します。


引用返信 編集キー/
■26004 / inTopicNo.2)  Re[1]: フォルダー内のエクセル名とそのリンクの表示方を教えてください
□投稿者/ あびお27 (2回)-(2008/09/30(Tue) 10:10:22)
分類をきちんと指定せず投稿してしまいました・・・
ご迷惑をおかけします。
引用返信 編集キー/
■26040 / inTopicNo.3)  Re[2]: フォルダー内のエクセル名とそのリンクの表示方を教えてください
□投稿者/ Jitta on the way (186回)-(2008/10/01(Wed) 07:36:46)
No26004 (あびお27 さん) に返信
> 分類をきちんと指定せず投稿してしまいました・・・
ASP.NET ですね?

まず、Directory が参照できない件ですが、ファイルの先頭付近に「Import System.IO」を追加して下さい。

次にリンクですが、考えていらっしゃる方法では、出来ません。
出来るようにするためには、エクセル ファイルを、アプリケーションがあるディレクトリの下に持ってきて下さい。そうすると、アプリケーションのホーム ページから、相対パスで参照できるようななります。これを Anchor 要素の href 属性に指定します。
この方法は、リテラルを利用したり、リピーターを利用したり、いくつかの方法があります。


ん?
参考にされた所を見ていませんが、サーバーのドライブ構成を見せるのは、感心しないなぁ...
引用返信 編集キー/
■26044 / inTopicNo.4)  Re[3]: フォルダー内のエクセル名とそのリンクの表示方を教えてください
□投稿者/ みきぬ (123回)-(2008/10/01(Wed) 09:43:15)
No26040 (Jitta on the way さん) の発言より:
> ん?
> 参考にされた所を見ていませんが、サーバーのドライブ構成を見せるのは、感心しないなぁ...
>
というわけで excelファイルに直接リンクさせるのではなく、excelファイルをダウンロードする機能を持った aspxページへリンクさせるといいんじゃないでしょうか。


このへんが参考になるかしら。
http://dotnetfan.org/forums/thread/58.aspx
引用返信 編集キー/
■26046 / inTopicNo.5)  Re[3]: フォルダー内のエクセル名とそのリンクの表示方を教えてください
□投稿者/ あびお27 (3回)-(2008/10/01(Wed) 10:29:15)
Jitta on the way さん

アドバイスをありがとうございます。
投稿記事の分類は「ASP.NET (VB)」というのがあったので
それを指定するべきだったのではと思いました。

ファイルには<%@ Import Namespace="System.IO" %>を追加しているのですが、
どうも参照できません。

リンクは考えているような方法ではできないのですね。
それが分かるとこれ以上無意味にリソースを探す必要もなくなるので
アドバイス助かりました。

> 参考にされた所を見ていませんが、サーバーのドライブ構成を見せるのは、感心しないなぁ...
との事。すみません。知識不足でよく分からないのですが、
ドライブの構成は例のコードのように表示しないほうが良いのですね?
これから注意します。

お時間どうもありがとうございました。

引用返信 編集キー/
■26047 / inTopicNo.6)  Re[4]: フォルダー内のエクセル名とそのリンクの表示方を教えてください
□投稿者/ あびお27 (4回)-(2008/10/01(Wed) 10:30:48)
みきぬさん、

すばらしいアイデアをありがとうございます。
教えてくださったページをもとに試してみます。

どうもありがとうございました!


引用返信 編集キー/
■26107 / inTopicNo.7)  Re[4]: フォルダー内のエクセル名とそのリンクの表示方を教えてください
□投稿者/ Jitta (518回)-(2008/10/01(Wed) 22:57:13)
Jitta さんの Web サイト
No26046 (あびお27 さん) に返信
 参考にされたところを見ました。あまり、勧めたくないなぁ...

> 次にリンクですが、考えていらっしゃる方法では、出来ません。
 これは、aspnet101 のコード例もそうなのですが、リンク先として、
ローカルドライブを指定していることを指しています。
-----このあたり-----
if right(Files(i).Name, 3) = "gif" or right(Files(i).Name, 3) = "jpg" then
    txtFileList.Text += "<tr><td><img src='images/file.gif'>< a href='" & _
    strDir & "/" &  Files(i).Name & "' target='_blank'>" & _
    Files(i).Name & "< /a></td><td valign='bottom'>" & _
    Files(i).LastWriteTime & "</td></tr>"
-----
strDir は、GetFiles メソッドの先頭付近で、"d" クエリー文字列から取得しています。
"d" クエリーは、txtFileList.Text に対して、subDirs(i).Fullname を割り当てています。
このため、“サーバーとクライアントが同一端末ならば”、参照できます。


> > 参考にされた所を見ていませんが、サーバーのドライブ構成を見せるのは、感心しないなぁ...
> との事。すみません。知識不足でよく分からないのですが、
> ドライブの構成は例のコードのように表示しないほうが良いのですね?
 aspnet101 にも、
「but we can't create an online example of it due to security issues.」
(セキュリティの問題があるから、オンラインの例を作成できないよ。)
と書いてあるとおりです。
ASP.NET のワーカープロセスがどの程度の権限を持っているかに依存しますが、
ローカルのファイル構成がそのまま見えてしまうため、
apnet101 のようなことをするのは、難があります。


 onoさんのページでは「ダウンロードのみ」なので、リンクを作るところを説明します。
 ファイルの一覧は、No26003 でされているように、「System.IO.Directory.GetFiles」で
取得します。ファイル名の取り出しには、Path.GetFileName メソッドを使います。
http://msdn.microsoft.com/ja-jp/library/system.io.path.getfilename.aspx
「後ろから、パス デリミタを探す」というのは、かまいません。
しかし、aspnet101 のように、「最後から3文字で拡張子を判定する」のは、まねてはいけません。

 ここで取り出したファイル名は、aspnet101 をまねて、リンクを作ります。
-----
dim fileList as System.Text.StringBuilder = New System.Text.StringBuilder()
For Each パス名 In System.IO.Directory.GetFiles(...)
    dim ファイル名 As String = System.IO.Path.GetFileName(パス名)
    fileList.AddFormat("< a href=""dl.aspx?d={0}"">{0}< /a><br>", ファイル名)
Next
-----
これで、GetFiles に指定したディレクトリにあるファイルの一覧ができます。
fileList.ToString() を、Literal コントロールに設定します。
 文字列連結は、非常にわかりやすいのですが、メモリをたくさん消費し、
実行速度も若干落ちるため、おすすめしません。

 リクエストにクエリがくっついているときには、ダウンロードをさせます。
クエリの取り出し方、判定の仕方は、aspnet101 のページを参照してください。


 ただ、上記のコードは、セキュリティ問題を含んでいます。
Windows では、ファイル名に "<" や ">" を使用することができません。
しかし、"%" や "&" は使えます。これらは適切に処理を行ってください。
"asp%20net.txt" や "asp&lt;net&gt;.text" といったファイル名を作って
表示させれば、何がまずいのかわかると思います。
解決方法は、onoさんのページに、ちょっと変形させて書かれています。

#####
<a></a>が入力できないので、"< a>""< /a>" と、空白を入れています。

引用返信 編集キー/
■26111 / inTopicNo.8)  Re[5]: フォルダー内のエクセル名とそのリンクの表示方を教えてください
□投稿者/ あびお27 (5回)-(2008/10/02(Thu) 03:37:58)
Jittaさん、

こんなに詳しく説明をしていただいて
本当にありがとうございます。

Jittaさんの説明をもとに、色々試してみます。

お時間を割いていただき、どうもありがとうございました。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -