我正在创建一个独立的应用程序,将分发给许多用户。现在每个用户可能会将可执行文件放置在其计算机上的不同位置。
我希望在可执行文件所在目录中创建一个新文件。因此,如果用户的可执行文件在以下目录中:
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文件夹的路径,您可以确保拥有写入权限。
c:\otherdir
目录中,并运行"c:\exefile\my.exe",则它将在c:\otherdir
而不是c:\exefile
中创建文件。 - Steve Smithstring 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
或 SpecialFolder.LocalApplicationData
。
我喜欢给用户选择权。我会将目录默认为 Environment.SpecialFolder.CommonApplicationData 等内容,并允许他们自行阅读和编辑路径。如果在控制台应用程序中,在帮助中显示该路径并允许他们通过命令行参数传递它。
这样可以避免他们费时地寻找文件夹。如果他们指向的路径无法写入,则引发错误并让他们决定如何处理。
IsolatedStorage
代替...即使在最低权限下,您也可以访问它。 - Anirudha