【问题标题】:open file from folder in visual studio 2012从 Visual Studio 2012 中的文件夹打开文件
【发布时间】:2014-01-31 10:12:40
【问题描述】:

我的桌面上有一个文件夹,里面有文件。我将其复制到解决方案的文件夹中,并在解决方案资源管理器中将该文件夹引用到解决方案中。但是,我无法使用相对路径打开该文件夹中的文件。

cs 文件的相对路径将是“../FolderIAdded/blabla”,如解决方案资源管理器中所示。但在 windows 资源管理器中,路径当然不同:

Solutionfolder
- SolutionFolder.sln
- Solutionfolder.v11.suo
- SolutionFolder
-- bin
-- obj
-- Properties
-- TheFolderIAdded
-- App.config
-- Form1.cs
-- etc.

这里是“FolderIAdded/blabla”

我必须把那个文件夹放在哪里?

我的目标:我希望能够在我的 c# 代码中使用相对路径打开该文件夹中的文件。

【问题讨论】:

    标签: c# visual-studio-2012


    【解决方案1】:

    您假设您的程序在源代码所在的目录中运行。事实并非如此。根据您的配置,您的程序将从 Solutionfolder\bin 中的目录执行。

    一种可能的解决方案是在构建项目时将文件复制到输出目录。

    【讨论】:

      【解决方案2】:

      另一种选择是在编译时将文件嵌入到应用程序的程序集中,尽管这会阻止在部署后对它们进行编辑。为此,请将 Build Action 设置为“Embedded Resource”,然后您可以使用Assembly 类的GetManifestResourceStream 方法访问它们。您需要为其提供的文件名将来自项目结构中的路径,因此在您的示例中它将是“TheFolderIAdded.Filename.ext”。

      是的,这是一个点,而不是反斜杠。

      假设文件嵌入在想要读取它们的代码所在的同一程序集中,代码将类似于

      var assembly = Assembly.GetExecutingAssembly();
      using (var stream =
          assembly.GetManifestResourceStream("TheFolderIAdded.Filename.ext"))
      using (var reader = new StreamReader(stream)) {
        string fileContents = reader.ReadToEnd();
      }
      

      【讨论】:

        【解决方案3】:

        我认为从 .cs 文件写入相对路径不是一个好主意。 根据应用程序的执行位置更好地构建路径: 一个例子,网上还有很多其他的:How can I get the application's path in a .NET console application?

        (您的应用程序不在解决方案的根文件夹中运行,而是在 .exe 文件所在的位置运行。例如,当您调试桌面应用程序时,它通常从 [解决方案文件夹]/bin/debug/ 运行)

        然后确保您要打开的文件属性复制到输出目录设置为始终复制如果较新则复制(右键单击解决方案资源管理器中的文件,然后单击“属性”以确保访问它。)

        【讨论】:

        • 嘿,嘿!我终于明白了。我按照您描述的方式工作,获取应用程序路径,然后将属性设置为始终复制。不过我得说,Eclipse 在这方面要容易得多……只是因为我总是读到 VS 是一个非常棒的 IDE……但是,它确实有效。非常感谢!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-28
        • 1970-01-01
        • 2012-07-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多