我正在创建一个将分发给许多用户的独立应用程序。现在每个人都可以将可执行文件放在他们机器上的不同位置。
我希望在执行可执行文件的目录中创建一个新文件。所以,如果用户有他的可执行文件:
C:\exefile\
该文件是在那里创建的,但是如果用户将可执行文件存储在:
C:\Users\%Username%\files\
应该在那里创建新文件。
我不希望在我的应用程序中对路径进行硬编码,而是确定可执行文件存在的位置并在该文件夹中创建文件。我怎样才能做到这一点?
永远不要在可执行文件所在的目录中创建文件。尤其是使用市场上最新的操作系统,您可以轻松地在文件创建时跳入安全问题。为了保证文件创建过程,所以你的数据也持久性,使用这个代码:
var systemPath = System.Environment.
GetFolderPath(
Environment.SpecialFolder.CommonApplicationData
);
var complete = Path.Combine(systemPath , "files");
这将生成一个路径,如C:\Documents and Settings\%USER NAME%\Application Data\files 文件夹,您保证在其中具有写入权限。
您可以使用以下命令获取新文件的完整路径:
string path = Path.GetDirectoryName(Application.ExecutablePath) + "\\mynewfile.txt"
string path;
path = System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase );
MessageBox.Show( path );
在现代操作系统中,公认的答案是:
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
orSpecialFolder.LocalApplicationData
代替。
我喜欢给用户选择。我会将目录默认为 Environment.SpecialFolder.CommonApplicationData 之类的目录,并让他们随意读取和编辑路径。如果在控制台应用程序中显示帮助中的路径并允许他们通过命令行参数传递它。这为他们省去了寻找文件夹的麻烦。如果他们指向您无法写入的路径,那么您会抛出错误并让他们决定要做什么。