【问题标题】:Local paths of files contained in a solution解决方案中包含的文件的本地路径
【发布时间】:2013-06-04 06:57:34
【问题描述】:

我需要从包含在我的解决方案文件夹内的文本文件中读取数据(它已添加到解决方案中,可从解决方案资源管理器访问)。我知道如何像这样访问它...

_prefixParts = PopulateFromFile(
    @"C:\Users\Owner\Desktop\AoW\AoW\AoW\Utility\Names\namePrefix.txt");

有没有办法写入解决方案的本地文件路径?我已经尝试了所有我能想到的方法,但没有成功。

另外,如果我将该文本文件设为嵌入式资源,这是否重要?

【问题讨论】:

    标签: c# path filepath


    【解决方案1】:

    是的。您可以将其设为嵌入式资源。或者更好的是,将其设为资源 (.resx)。

    回答您的第一个问题:您可以使用相对路径来访问该文件。因此,假设可执行文件位于您的 bin\Debug 文件夹中。这意味着您需要向上两次才能进入项目文件夹的根目录。

    例如。您的文件夹结构是:

    • SolutionName\ProjectName\bin\debug --> 可执行文件的位置
    • SolutionName\ProjectName\Folder1\Folder2 --> namePrefix.txt 的位置

    你需要的是..\..\Folder1\Folder2\namePrefix.txt

    我想强调的是,如果您将应用程序作为 Windows 服务运行,这将不起作用。更好的是,为该文件使用资源。

    【讨论】:

    • 我是否应该将其设为 .resx,部署后该文件是否会在另一台机器上可见?我不希望它被查看或修改。
    • 是的。 .resx 将与您的二进制文件一起编译为二进制格式。因此无法读取。你可以阅读Compiling Resources into Assemblies
    • 谢谢。我会尝试走这条路。
    • Np。如果对您有帮助,请将其标记为答案。所以这个话题可以继续。 :)
    【解决方案2】:

    使用 T4 模板生成解决方案文件夹的绝对路径,然后使用 Path.Combine 将其与所需文件的相对路径(类似于“AoW\Utility\Names\namePrefix.txt”)结合起来。

    见T4 Get Current Working Directory of Solution

    这是一个更好的代码示例:Accessing Projects via DTE in C# T4 Template

    【讨论】:

      【解决方案3】:

      不,在一般情况下,不可能在解决方案/项目中获取用于构建可执行文件或库的文件的路径,因为此信息未存储在生成的程序集中(并且代码可能在完全不同的机器上运行)。

      选项:

      • 将文件复制到输出文件夹(将该文件的“复制到输出文件夹”设置为 true)并且文件将位于可执行文件旁边 - 您将能够根据可执行文件的路径和文件名组合完整路径
      • 嵌入为资源并从资源中读取
      • 将文件路径指定为命令行参数/配置设置

      如果您只关心从 VS 执行而不是使用文件的相对路径,因为位置将始终相同。

      【讨论】:

        猜你喜欢
        • 2015-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-09
        • 2013-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多