4

ac#コンソールアプリケーションのファイルからデータを読み取る必要があります。
何が機能するか: new StreamReader(@"..\\..\myData.csv");

問題:..\\..\exeファイルがbin / Debugディレクトリにあるために機能するプロジェクトをデプロイすると、パスが機能しなくなります

質問:exeファイルの場所に関係なくmyData.csvを参照するにはどうすればよいですか?

コンソールアプリケーションの「ルート」を返すメソッドを見つけたいと思っていました。これまでのところ、次のことを試しました。

Process.GetCurrentProcess().MainModule.FileName
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location
Path.GetFullPath("bp.csv")
AppDomain.CurrentDomain.BaseDirectory
Directory.GetCurrentDirectory()

これらの式はすべて、ルートではなくexeファイルのディレクトリに移動します。

分離ストレージについて読み始めたばかりですが、もっと簡単なものがあればいいのにと思います。何か提案/推奨事項はありますか?

4

3 に答える 3

6

最も簡単なオプションは、おそらく CSV ファイルをソリューションに追加し、VS で右クリックしてビルド アクションを [新しい場合はコピー] に設定することです。あなたが構築します。

コードでは、次のように実行中のアセンブリの現在の場所を取得できます。

string folder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

次に、パスを CSV ファイル名と組み合わせることができます。

string filePath = Path.Combine(folder, "myData.csv");
于 2010-12-05T06:21:24.107 に答える
2

myData.csvはどこに保存されますか?このファイルの絶対的な場所が必要です。

いくつかのオプションがあります

  1. このファイルは、exeが配置されているのと同じディレクトリに配置できるため、実行する必要があるのは

    new StreamReader("myData.csv");
    
  2. App.Conigファイルでファイルの場所を定義し、その場所を読み取ることができます。

  3. パス変数を設定し、PATH変数を読み取ることができます。

于 2010-12-05T04:48:41.473 に答える
0

コードを次のように変更する必要があります

new StreamReader("myData.csv");

これにより、.exe の実行元と同じフォルダーからデータが常に読み取られるようになります。

その後、ビルド後のステップを作成してファイルを展開フォルダー (またはサブフォルダー) にコピーし、デバッグ環境でもファイルが正しい場所に配置されるようにします。ファイルをプロジェクトの出力パスに配置する必要がある場合は、データ ファイルの [出力フォルダーにコピー] プロパティもこれを行います。

さらに制御が必要な場合は、ビルド後のステップで、$(ProjectPath) などのマクロを使用してプロジェクト ファイルの場所を参照し、$(TargetDir) を使用して出力ディレクトリの場所を参照できます。

于 2010-12-05T10:11:01.600 に答える