3

私がやろうとしているのは、「添付ファイル」という名前のWindowsアプリケーションフォルダ内にあるCSVファイルからデータを読み取ることです。Webアプリケーションでは、を使用してフォルダのパスを取得できます

Server.MapPath(@"Attachments/sample.csv");

Windowsアプリケーションからの同等の呼び出しは何ですか?

以下は私のコードです。

string[] str = File.ReadAllLines(@"Attachment/sample.csv");

// create new datatable
DataTable dt = new DataTable();

// get the column header means first line
string[] temp = str[0].Split(';');

// creates columns of gridview as per the header name
foreach (string t in temp)
{
    dt.Columns.Add(t, typeof(string));
}
4

4 に答える 4

2

Windowsアプリケーションフォルダは、この列挙型で識別できます

Environment.SpecialFolder.ProgramFiles

MSDN参照

実際のパスとあなたが書いた完全なファイル名を含む文字列を取得するには

string pathToFile = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
string fullFileName = Path.Combine(pathToFile, @"Attachment\sample.csv");

Cole Johnsonのコメントで述べられているように、ホスティングオペレーティングシステムが64ビットの場合は問題があります。その場合、2つのアプリケーションフォルダがあります。1つは64ビットアプリ用、もう1つは32ビットアプリ用です。NET4を使用すると、プロパティを使用して現在のオペレーティングシステムのビット数を検出できます。

Environment.Is64BitOperatingSystem

そして、falseの場合は、別の列挙型を使用します

Environment.SpecialFolder.ProgramFilesX86

しかし、結局のところ、プログラムのアーキテクチャに何かを変更する必要があると思います。
Webアプリケーションでは、通常、Webルートの外部のフォルダーは使用しません。
ただし、WinFormsアプリケーションにはそのような制限がないため、CSVファイルを別のフォルダーにインストールして(MyDocumentsが思い浮かびます)、構成ファイルのオプションを使用してハードディスク上の実際の場所を制御できます。

注意:アプリケーションフォルダには、書き込みを行うための特別な権限が必要です(添付ファイルを保存する場合、これは、アプリケーションフォルダとは別の場所を選択するもう1つの理由です)

于 2012-06-20T22:21:52.133 に答える
2

パスは実行可能ファイルに対する相対パスですか? その場合、Application.StartupPathを使用してプログラムが開始された場所を特定し、それを相対ファイル パスと組み合わせて完全なパスを取得できます。

var fullPath = Path.Combine(Application.StartupPath, @"Attachment\sample.csv");

ただし、アプリがサービスとして実行されているか、ClickOnce 配置を使用している場合、これは機能しません。

于 2012-06-20T22:23:28.933 に答える
1

あなたはこれを行うことができます

Path.Combine(Application.StartupPath, @"Attachment\sample.csv");
于 2012-06-20T22:27:42.913 に答える
0

スティーブは私を打ち負かしましたが、ええ、あなたが探しているフォルダーのインテリセンスをチェックしてください:

string path = Environment.GetFolderPath(Environment.SpecialFolder.

プロパティ

そこにはあらゆる種類のシステム パスがあります。

于 2012-06-20T22:23:38.363 に答える