1

私のファイルは次のように参照されます(すべて相対的です):

// 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 を設定しようとしましたが、何も動作しませんでした。とにかくなぜ私はそれをしなければならないのですか?それは相対パスの目的を無効にしますか?

対応しています。

「アプリケーション」は現在のコンテキストには存在しません。人々が言及したことを試し続けます。これはwindows.formではありません

テスト

Path.GetDirectoryName(Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase), myPageTitleXML); Path.GetFullPath() と同様に、URI 形式はサポートされていません。Server.MapPath もエラーになります。これは現在オフラインです

4

3 に答える 3

0

このディレクトリが、コードが実行されているディレクトリの下のどこかにあると仮定すると、..

Application.ExecutablePath() 

また

Application.StartUpPath()

.. 「pagetitles.xml」ファイルを含む「xml」ディレクトリを検索するときに、アプリケーションが何を見ているかについてのアイデアを得るために。

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

これがあなたを正しい道に導くことを願っています。

于 2009-08-05T20:53:42.247 に答える
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..  
 }
于 2009-08-05T20:55:35.537 に答える