- PR -

ASP.NETでのWEBサイト構築

1
投稿者投稿内容
DragStar
常連さん
会議室デビュー日: 2008/08/31
投稿数: 40
投稿日時: 2008-09-17 15:05
はじめまして。

WEBサイト構築初心者の者です。
今、WEBサイトを作成中なのですが一点つまずいてしまっています。
このサイトのデータの格納方法としてXMLを使用しているのですが、
そのXMLファイルのパスをコード内で指定するときに相対パスで指定したいのですがうまくいきません。

指定方法としては、
./ASP/***.xml
といった形で指定しているのですが、これってどこからの相対パスになるのでしょうか?
自分のイメージではWEBサイトのルートパスが相対パスの元だと思っていたのですが。。。
自分の開発中のWEBサイトのルートパスは
C:/WEB開発/work
となっているのですが、上記の方法で相対パスを指定すると
C:/Program Files/Microsoft Visual Studio 8/Common7/IDE/ASP/***.xml
となってしまいます。
これってどこかで設定したりするのでしょうか??
dllの場所がカレントになっているってことですよね??
WEBサイトのルートパスにできないんですかね??

初心者のため、質問方法が荒いと思いますがご容赦ください。
有識者の方、よろしくお願いいたします。
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2008-09-17 16:16
ASP.NET では Web サイトの仮想ディレクトリのルートパスを ~ (チルダ) で表すことができます。
# これは、ASP.NET のサーバーコントロール等でのみ有効な記法であり、
# HTML タグや、ASP.NET と無関係の .NET クラスライブラリでは使用できないので注意してください。

例えば、Web サイトのルートディレクトリにある Hoge.xml ファイルは
"~/Hoge.xml" と表せます。
Web サイトの URL が "http://localhost/WebSite1" ならば、
これは "http://localhost/WebSite1/Hoge.xml" を示します。

ただし、このままでは物理ディレクトリのパスとしては扱えません。
そのため、HttpServerUtility.MapPath メソッド (System.Web) を使用して、
仮想パスから物理パスに変換します。
このメソッドを使用する場合は、Page クラスの Server プロパティや HttpContext の Server プロパティから辿っていくことができます。

コード:
string hogeFielPath = HttpContext.Current.Server.MapPath("~/hoge.xml");
byte[] hogeData = File.ReadAllBytes(hogeFilePath);


_________________
C#と諸々
DragStar
常連さん
会議室デビュー日: 2008/08/31
投稿数: 40
投稿日時: 2008-09-17 18:04
早速の返答ありがとうございます。

"~/Hoge.xml"
の存在は知っていましたが、aspファイル内では問題なく使用できるのですが、
僕の場合はロジックを各ファイルを分けているので***.aspxではなく****.csファイルの
ほうで相対パスを使いたいのですが"~/Hoge.xml"のような記載ではWEBサイトのルートディレクトリが取ってくれなくて困っていたのです。

IISの設定で仮想ディレクトリを再設定してご指摘いただいた方法
>ただし、このままでは物理ディレクトリのパスとしては扱えません。
>そのため、HttpServerUtility.MapPath メソッド (System.Web) を使用して、
>仮想パスから物理パスに変換します。
>このメソッドを使用する場合は、Page クラスの Server プロパティや HttpContext の >Server プロパティから辿っていくことができます。
でやったらうまくいきました。
ありがとうございました。非常に助かりました。
勉強になります。また質問するとは思いますがその節にはまたよろしくお願いいたします。

教えて君を早く卒業したいです。。。
1

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