【问题标题】:How to create a folder and file inside of the folder where the app is installed? c#如何在安装应用程序的文件夹中创建文件夹和文件? C#
【发布时间】:2015-08-07 08:26:58
【问题描述】:

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

【问题讨论】:

  • stackoverflow.com/questions/864484/… 使用 asessmbly 位置获取路径
  • 到目前为止您尝试过什么?没有人会实现您的应用程序。但我们期待着为您提供帮助:)。
  • 自从我构建它以来,我的路径包括我的电脑名称。但是现在我必须更改它,如果有一些非常简单的方法,我只是在徘徊,Candide 给了我解决问题的方法,我只需要再等 5 分钟即可将其标记为正确答案 :))
  • 您可以从 Environment.GetFolderPath(Environment.SpecialFolders.Desktop) 获取当前用户的桌面。不要尝试构建路径,它可能不是您期望的位置,请询问系统。
  • @Mystia 我建议您测试 Alex 的方法并将其标记为正确答案,因为这似乎是更好的解决方案。

标签: c#


【解决方案1】:

您尝试做的事情是不可取的;如果您的应用程序是使用推荐的默认方法(遵循 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()

【讨论】:

  • 似乎这是更好的方法,但我还没有尝试过。
【解决方案2】:

这适用于 Web 和 Windows 应用程序:

Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;

【讨论】:

  • 有一些方法可以使用自定义 BaseDirectory 启动 AppDomain,因此它可能不是执行程序集的位置(应用程序应该位于的位置)。
  • 是的,当然,但是,我怀疑提出这个问题的人必须处理这样一个高级场景。实际上,不要试图刻薄和戳你的答案,但是,你可以从技术上动态加载一个可能位于其他地方的 dll,并且执行的程序集可能与“应用程序”不在同一个地方。无论如何,我怀疑这里提出问题的人是否面临任何此类问题。
  • 是的,如果代码在 DLL 中,它可能在其他地方,是的,这是一个高级方案 - 这是因为“安装应用程序的文件夹”没有正式定义。 “简单场景模式”也是我添加建议不要这样做的原因,因为出于安全目的,正确安装的程序位于除 TrustedInstaller 之外的所有人的只读文件夹中。
【解决方案3】:

您可以使用此代码获取可执行文件的路径(大多数情况下,实际上它返回当前工作目录)

System.Environment.CurrentDirectory

【讨论】:

  • 错误,即应用程序启动的当前目录。它可能是也可能不是应用程序的安装目录。
  • @AlexMazzariol 正如我在答案中提到的,它是可执行文件的位置(所以不一定是安装目录),似乎这就是他所说的安装目录。
  • 这不是可执行文件的位置,而是它的启动位置。尝试从控制台,在 X 目录中,在 Y 目录中启动程序并给出完整路径:结果将是 X 目录,而不是程序所在的 Y。
【解决方案4】:

如果您只指定一个不以驱动器号开头的路径,那么该路径将与应用程序运行的位置相关。例如以下程序将在应用程序的本地文件夹中创建一个文件夹和文件。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    相关资源
    最近更新 更多