我希望能够在安装应用程序的文件夹内设置默认文件夹和文件?因为这个应用程序将在多台机器上使用,所以我不能指定像C://Users/PcName/etc..
这样的路径有没有非常简单的方法呢?
答案 0 :(得分:3)
你想要做的是不可取的;如果您的应用程序是使用推荐的默认方法安装的(遵循Microsoft准则),则应用程序将位于C:\Program Files
下的目录中(或者可能重定向程序文件文件夹的位置),并且运行应用程序的用户将不会拥有对该目录的写访问权限,因此目录创建将失败。
也就是说,你不能使用Environment.CurrentDirectory
,因为它可能是也可能不是你的应用程序的可执行文件所在的目录,也不是CurrentDomain.BaseDirectory
,因为这也没有意义(文档说它是加载器搜索程序集的目录,但可能是也可能不是应用程序可执行文件的目录。
从this其他答案中复制,找到程序集目录的正确方法是
public static string AssemblyDirectory
{
get
{
string codeBase = Assembly.GetExecutingAssembly().CodeBase;
UriBuilder uri = new UriBuilder(codeBase);
string path = Uri.UnescapeDataString(uri.Path);
return Path.GetDirectoryName(path);
}
}
获得路径后,您可以尝试使用System.IO.Directory.CreateDirectory()
创建目录,使用System.IO.File.WriteAllText()
或其兄弟姐妹创建文件,或者创建文件的任何其他标准方法。
您可能还想使用较新的Assembly.GetExecutingAssembly().Location
属性,并在其上使用Path.GetDirectoryName()
。
答案 1 :(得分:2)
您可以使用此代码获取可执行文件的路径(大多数情况下,实际上它返回当前工作目录)
System.Environment.CurrentDirectory
答案 2 :(得分:2)
这适用于网络和Windows应用:
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
答案 3 :(得分:0)
如果您只指定了一个不以驱动器号开头的路径,那么该路径将相对于运行应用程序的位置。例如以下程序将在应用程序的本地文件夹中创建一个文件夹和文件。
class Program
{
static void Main(string[] args)
{
var installedLocation = Directory.GetParent(Assembly.GetExecutingAssembly().Location);
var di = installedLocation.CreateSubdirectory("MyFolder");
File.WriteAllText(Path.Combine(di.FullName, "File.txt"), "This will be written to the file");
var installedPath = AppDomain.CurrentDomain.BaseDirectory;
var di2 = Directory.CreateDirectory(Path.Combine(installedPath, "MyFolder2"));
File.WriteAllText(Path.Combine(di.FullName, "File2.txt"), "This will be written to the file");
}
}