2009-08-05 5 views
1

私のファイルが(それはすべての相対だ)ので、同じように参照されていますsystem.io.directorynotfound - >しかし、それはコンソールで動作します!

// WHERE YOU KEEP THE PAGE TITLE XML 
    public static string  myPageTitleXML = "xml/pagetitles.xml"; 

using (StreamReader r = new StreamReader(myPageTitleXML)) 
    { //etc.. . .etc....etc.. 
    } 

とき、私、私はsystem.io.directorynotfound取得し、「この問題はシャットダウンする必要があります」実行可能ファイルをダブルクリックします。しかし、それをコンソールから実行することは、魅力のように機能します。ここで何が間違っていますか?

Environment.CurrentDirectoryを設定しようとしましたが、何もできませんでした。とにかくそれをやらなければならないのはなぜですか?それは相対的な道の目的を打ち負かすか?

回答です。

「アプリケーション」は、現在のコンテキスト内に存在しない、私は、人々が言及したものをしようとしておこう、これはPath.GetDirectoryName(リフレクション

をテストwindows.form

ではありません。 Assembly.GetExecutingAssembly()。GetName()。CodeBase)、myPageTitleXML)。エラーを返すPath.GetFullPath()と同様に、URI形式はサポートされていません。同様のエラーでServer.MapPathの結果は、これは..あなたが使用できるように聞こえる、

答えて

0

は、まあ、このディレクトリを仮定すると、コードが実行されているディレクトリの下のどこかにある現在オフラインです

Application.ExecutablePath() 

かそれはそれで「pagetitles.xml」ファイルで「XML」ディレクトリを探しに行くときにアプリケーションが見ているものにとアイデアを得るために

Application.StartUpPath() 

..

これらの方法のいずれかで返されたディレクトリが、それが思った場所を指していない場合は、アプリケーションの場所またはこのフォルダの場所をアプリケーションと同じディレクトリ内に移動する必要があります。

これは正しいパスであなたを取得します。

0

実行ファイルをダブルクリックして実行すると、xmlという名前のフォルダにpagetitles.xmlというファイルがありますか?xmlは実行可能ファイルと同じ場所にあるフォルダですか?

このような相対パスを使用することは確かに可能ですが、実際には推奨しません。代わりに、次のようなものを使用してください:

string fileToOpen = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase), myPageTitleXML); 
using (StreamReader r = new StreamReader(fileToOpen)) 
{ 
    //etc.. . .etc....etc.. 
} 
0

このASP.NETコードはありますか?もしそうなら、おそらくMapPath( "xml/pagetitles.xml")を実行する必要があります。

関連する問題