繁体   English   中英

从Visual Studio 2012中的文件夹打开文件

[英]open file from folder in visual studio 2012

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

在解决方案资源管理器中可以看到,来自cs文件的相对路径为“ ../FolderIAdded/blabla”。 但是在Windows资源管理器中,路径当然是不同的:

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

在这里,它将是“ FolderIAdded / blabla”

我必须在哪里放置该文件夹?

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

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

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

文件属性

另一种选择是在编译时将文件嵌入到应用程序的程序集中,尽管这样可以防止在部署后对其进行编辑。 为此,将“构建操作”设置为“嵌入式资源”,然后可以使用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();
}

我认为从.cs文件写入相对路径不是一个好主意。 更好地根据应用程序的执行位置构建路径 :一个示例,网络上还有很多其他东西: 如何在.NET控制台应用程序中获取应用程序的路径?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM