C#文件处理:在可执行文件所在的目录中创建文件

时间:2012-08-15 09:56:03

标签: c# file-io

我正在创建一个独立的应用程序,将分发给许多用户。现在每个人都可以将可执行文件放在他们机器上的不同位置 我希望在执行可执行文件的目录中创建一个新文件。因此,如果用户的可执行文件在:

C:\exefile\

在那里创建文件,但是如果用户将可执行文件存储在:

C:\Users\%Username%\files\

应该在那里创建新文件。

我不希望在我的应用程序中硬编码路径,但要确定可执行文件的存在位置并在该文件夹中创建文件。我怎样才能做到这一点?

6 个答案:

答案 0 :(得分:20)

永远不要在可执行文件所在的目录中创建文件。特别是使用市场上最新的操作系统,您可以轻松地进入安全问题,创建文件。 为了保证文件创建过程,所以您的数据也是如此,请使用以下代码:

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

这将生成一个类似 C:\ Documents and Settings \%USER NAME%\ Application Data \ files 文件夹的路径,其中保证具有写入权限

答案 1 :(得分:9)

只需使用File.Create

File.Create("fileName");

这将在可执行程序中创建文件,而不指定完整路径。

答案 2 :(得分:4)

您可以使用以下命令获取新文件的完整路径:

string path = Path.GetDirectoryName(Application.ExecutablePath) + "\\mynewfile.txt" 

答案 3 :(得分: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

答案 4 :(得分: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.ApplicationDataSpecialFolder.LocalApplicationData

答案 5 :(得分:0)

我希望为用户提供选择。我会将目录默认设置为Environment.SpecialFolder.CommonApplicationData之类的文件,让他们随意读取和编辑路径。如果在控制台应用程序中,则在帮助中显示路径,并允许他们通过命令行参数传递该路径。 这为他们节省了寻找文件夹的麻烦。如果他们指向您无法写入的路径,则会引发错误并让他们决定要怎么做。