【问题标题】:Pointing the program to the resource folder将程序指向资源文件夹
【发布时间】:2014-05-29 00:20:41
【问题描述】:

我正在制作一个将在另一台计算机上打开的应用程序,它依赖于在编译时读取资源。我能够让它读取给定我计算机上路径的文件内容,但我需要它来自动找到它所使用的任何计算机上资源文件夹的路径。

代码是;

    private void readFile()
    {
        string path = ;
        string[] lines = System.IO.File.ReadAllLines(path);
        for (int i = 0; i <= 10; i++)
        {
            if (i == 2)
            {
                media[0, 0] = lines[i];
                System.Diagnostics.Debug.WriteLine(media[0, 0]);
            }
            if (i == 3)
            {
                media[0, 1] = lines[i];
                System.Diagnostics.Debug.WriteLine(media[0, 1]);
            }
            if (i == 5)
            {
                media[1, 0] = lines[i];
                System.Diagnostics.Debug.WriteLine(media[1, 0]);
            }
            if (i == 6)
            {
                media[1, 1] = lines[i];
                System.Diagnostics.Debug.WriteLine(media[1, 1]);
            }
            if (i == 8)
            {
                media[2, 0] = lines[i];
                System.Diagnostics.Debug.WriteLine(media[2, 0]);
            }
            if (i == 9)
            {
                media[2, 1] = lines[i];
                System.Diagnostics.Debug.WriteLine(media[2, 1]);
            }
            if (i == 10)
            {
                media[2, 2] = lines[i];
                System.Diagnostics.Debug.WriteLine(media[2, 2]);
            }
        }
    }

除了“ReadAllLines”行之外,其他一切都可以正常工作。我希望它指向资源文件夹,然后是其中的一个文件夹,然后是一个文本文件。

有人知道怎么做吗?任何帮助将不胜感激!

【问题讨论】:

  • 如果“...一切正常...”然后将其从问题中删除并仅显示相关代码。
  • 我已经添加了它,以便清楚它的作用。还是谢谢。

标签: c# path resources filepath readfile


【解决方案1】:

在我看来,处理这个问题的正确方法是这样的;

    string path = @".\myrelateive\path\toResources\myFile.txt";
    FileInfo myFile = new FileInfo(path);
    string[] lines = System.IO.File.ReadAllLines(myFile.FullName);

基本上,您应该只在源代码中使用相对路径。为了使其更加健壮,您可以使用 DirectoryInfoFileInfo 之类的类从相对路径中获取完整路径。

除此之外,在您的解决方案资源管理器中,您需要确保在构建时将资源复制到输出目录。这样做的方法是右键单击它们并选择视图属性,那里会有一个名为“复制到输出”的设置。选择“如果更新则复制”或“始终复制”。这将确保在您构建解决方案时资源文件与您的二进制文件捆绑在一起。从那里开始,代码应该是可移植的(假设机器的其他所有内容都类似于 .NET 版本等,这超出了这个问题的范围)。

【讨论】:

  • 谢谢,明天我再去编码的时候去看看。
  • 请记住,大多数(全部?)文件操作使用Environment.CurrentDirectory 来解析相对路径。这通常与调用程序集所在的目录不同。根据我对此类情况的经验,更常见的是希望从调用程序集的位置解析相对路径。 Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"my\relative\path.txt") 通常是解析相对路径的最佳方式。您应该检查.Location 没有返回 null,这可能发生在从 Internet 下载的程序集上。
猜你喜欢
  • 2020-01-31
  • 2016-07-14
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多