2014-01-31 92 views
1

我的桌面上有一个文件夹,里面有文件。我将它复制到我的解决方案的文件夹中,并在解决方案资源管理器中将该文件夹引用到解决方案中。但是,我不能用相对路径打开该文件夹中的文件。从视觉工作室的文件夹中打开文件2012

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

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

在这里,这将是“FolderIAdded /布拉布拉”

在哪里我已经把该文件夹?

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

回答

1

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

(您的应用程序不能在解决方案的根文件夹中运行,但其中的.exe文件locatated。例如,当您调试一个桌面应用程序,它从[解决方案文件夹] /斌/调试/)通常运行

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

+0

嘿,嘿!我终于明白了。我用你描述的方式工作,通过获取应用程序路径,然后设置属性来始终复制。我戈特说,虽然,Eclipse是比较容易的方式,当谈到这个...只是因为我总是读到VS是这样一个梦幻般的IDE ......但wlel,它的工作。非常感谢! – user2791739

3

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

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

File properties

2

另一种方法是将文件嵌入到你的应用程序在编译时汇编,虽然这在部署后排除他们的编辑。为此,请将构建操作设置为“嵌入式资源”,然后使用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(); 
}