7

多くのユーザーに配布されるスタンドアロンアプリケーションを作成しています。これで、それぞれが実行可能ファイルをマシンのさまざまな場所に配置できます。
実行可能ファイルが実行されたディレクトリに新しいファイルを作成したいと思います。したがって、ユーザーが実行可能ファイルを持っている場合:

C:\exefile\

ファイルはそこに作成されますが、ユーザーが実行可能ファイルを次の場所に保存した場合:

C:\Users\%Username%\files\

新しいファイルをそこに作成する必要があります。

アプリケーションにパスをハードコーディングしたくありませんが、実行可能ファイルが存在する場所を特定し、そのフォルダーにファイルを作成します。どうすればこれを達成できますか?

4

6 に答える 6

26

実行可能ファイルが存在するディレクトリにファイルを作成しないでください。特に市場に出回っている最新のOSを使用すると、ファイルの作成時にセキュリティの問題に簡単に飛び込むことができます。ファイル作成プロセスを保証し、データの永続性も保証するには、次のコードを使用します。

var systemPath = System.Environment.
                             GetFolderPath(
                                 Environment.SpecialFolder.CommonApplicationData
                             );
var complete = Path.Combine(systemPath , "files");

これにより、 C:\ Documents and Settings \%USER NAME%\ Application Data \ filesフォルダーのようなパスが生成され、書き込み権限があることが保証されます。

于 2012-08-15T10:00:16.180 に答える
11

使用するだけFile.Createです:

File.Create("fileName");

これにより、フルパスを指定せずに実行可能プログラム内にファイルが作成されます。

于 2012-08-15T09:59:17.727 に答える
8

新しいファイルへのフルパスは、次のコマンドで取得できます。

string path = Path.GetDirectoryName(Application.ExecutablePath) + "\\mynewfile.txt" 
于 2017-05-10T09:07:35.263 に答える
2
string path;
   path = System.IO.Path.GetDirectoryName( 
      System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase );
   MessageBox.Show( path );

http://msdn.microsoft.com/en-us/library/aa457089.aspx

于 2012-08-15T10:00:06.237 に答える
1

最新のオペレーティングシステムでは、次の答えが受け入れられています。

var systemPath = System.Environment.GetFolderPath(
    Environment.SpecialFolder.CommonApplicationData
);
var complete = Path.Combine(systemPath , "files");

「C:\ ProgramData\files」のようなユーザーに依存しないパスを生成します

次のようなユーザーベースのパスを作成するには: "C:\ Documents and Settings \%USER NAME%\ Application Data \ files"

SpecialFolder.ApplicationDataまたはSpecialFolder.LocalApplicationDataを代わりに使用する必要があります。

于 2020-06-15T19:12:22.220 に答える
0

私はユーザーに選択肢を与えるのが好きです。ディレクトリをデフォルトでEnvironment.SpecialFolder.CommonApplicationDataのようなものにし、パスを自由に読み取って編集できるようにします。コンソールアプリの場合は、ヘルプにパスを表示し、コマンドライン引数を介してパスを渡すことができるようにします。これにより、フォルダを探す手間が省けます。彼らがあなたが書くことができないパスを指しているなら、あなたはエラーを投げて、彼らに何をすべきかを決定させます。

于 2020-07-07T16:01:31.300 に答える