10

私は Visual Studio 2005 で作業しており、ソリューション エクスプローラーでプロジェクトを右クリックし、追加 --> 新しい項目を追加して、解析する必要があるテキスト ファイルを追加しました。これにより、.txt ファイルがプロジェクト フォルダーに配置されます。デバッグ .exe ファイルは /bin/debug フォルダーにあります。

相対パスを使用してコードから txt ファイルを適切に指すにはどうすればよいですか? ソリューションが公開された後に同じフォルダーにあることを解決しながら、2 つのフォルダーを適切に解決しますか?

4

7 に答える 7

10

あなたの質問を正しく理解できた場合: 「ソリューション エクスプローラー」でファイルを選択します。[プロパティ] --> [出力ディレクトリにコピー] で、[常にコピー] または [新しい場合はコピー] を選択します。ビルドアクションは「コンテンツ」を選択。これにより、ビルド時にファイルが /bin/debug フォルダーにコピーされます。それ以降は、プロジェクトのルートから参照できるはずです。

于 2008-10-03T01:40:02.897 に答える
6

アプリケーションクラスをチェックしてください。インストールされたアプリケーションに関連するファイルなどを見つけるために使用できるいくつかのメンバーがあります。

たとえば、Application.ExecutablePath は実行中の EXE ファイルの場所を示します。次に、..\..\FileToBeParsed.txt などの相対パスを使用してファイルを見つけることができます。ただし、これは、ファイルがプロジェクト フォルダー構造と同じフォルダー構造にデプロイされていることを前提としていますが、通常はそうではありません。

プロジェクトがデプロイされたら、CommonAppDataPath や LocalUserAppDataPath などのプロパティを検討して、アプリケーション関連のファイルを見つけます。

于 2008-10-03T01:48:11.487 に答える
4

ファイルをディスク上に配置する代わりに、ファイルをコンパイル済みアセンブリに埋め込みリソースとして直接含めることもできます。これを行うには、ファイルを右クリックし、ビルド アクションとして [埋め込みリソース] を選択します。その後、ファイルをバイト ストリームとして取得できます。

Assembly thisAssembly = Assembly.GetExecutingAssembly();
Stream stream = thisAssembly.GetManifestResourceStream("Namespace.Folder.Filename.Ext");
byte[] data = new byte[stream.Length];
stream.Read(data, 0, (int)stream.Length);

埋め込みリソースの詳細については、こちらこちらをご覧ください。

自分で使用するアプリケーションを作成する場合は、David Krep の提案が最適です。ファイルを出力ディレクトリにコピーするだけです。再利用または配布されるアセンブリを構築している場合は、単一の .dll にすべてがパッケージ化されるため、埋め込みリソース オプションが適しています。

于 2008-10-03T12:14:49.203 に答える
3

txt ファイルをアクティブな構成の出力フォルダーにコピーするビルド後のステップを追加します。

xcopy "$(ProjectDir)*.txt" "$(OutDir)"

" などの定義されたマクロがいくつかあります$(ConfigurationName)"$(ProjectDir)

于 2008-10-03T01:39:19.747 に答える
2

[プロジェクトのプロパティ]->[構成のプロパティ]->[デバッグ]に移動します

「作業ディレクトリ」を$(TargetDir)に設定します

次に、コード内の相対パス( ".... \ foo.xml"など)を使用してファイルを適切に参照できます。

于 2009-06-19T00:27:41.277 に答える
2

Application.ExecutablePath ソリューションは単体テストでは機能しません。vstesthost.exe のパスが返されます

System.Reflection.Assembly.GetExecutingAssembly().Location は機能しますが、アセンブリ名を含むパスを提供します。

したがって、これは機能します:
System.Reflection.Assembly.GetExecutingAssembly().Location + "\..\" + "fileToRead.txt"

しかし、ただ:

fileToRead.txt

動作します。作業ディレクトリは、デフォルトで実行中のアセンブリ ディレクトリのようです。

于 2010-12-09T14:44:12.147 に答える
1

ビルド後のイベントを追加して、.txt ファイルをビルド出力フォルダーにコピーできます。次に、コードは、ファイルが実行可能ファイルと同じフォルダーにあると想定できます。

于 2008-10-03T01:33:21.977 に答える