如何在安装应用程序的文件夹中创建文件夹和文件? C#

时间:2015-08-07 08:26:58

标签: c#

我希望能够在安装应用程序的文件夹内设置默认文件夹和文件?因为这个应用程序将在多台机器上使用,所以我不能指定像C://Users/PcName/etc..这样的路径有没有非常简单的方法呢?

4 个答案:

答案 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");
    }
}