C#在解决方案中打开文件

时间:2009-09-09 17:18:25

标签: c# visual-studio-2008 file

我认为这个问题对你们大多数人来说可能是微不足道的,但不知何故我找不到答案......所以,我在这个解决方案中有一个Visual Studio 2008解决方案foo和一个项目栏。在我的酒吧项目中,我有一个名为baz的目录,它看起来像这样:

foo dir
 |
 +-> bar dir
      |
      +-> baz dir
           |
           +-> asd file

现在我想在bar-project中打开我的“asd文件”但是需要“asd文件”的确切路径,我该如何找到它?我只是尝试了“baz \ asd”,但它不起作用。

谢谢!

Ĵ

4 个答案:

答案 0 :(得分:10)

您想在C#应用程序中在运行时打开bar - 项目中的文件吗?有几种方法可以实现这一点,我会给你最简单的。

  1. 转到解决方案资源管理器
  2. asd属性
  3. 构建操作设置为Content
  4. 复制到输出目录设为Copy always(或Copy if newer
  5. 然后,您可以在C#中按如下方式引用该文件(假设您的程序不会将当前工作目录从可执行目录更改):

    using (StreamReader reader = new StreamReader(@"baz\asd"))
    {
        // ...
    }
    

    其他方式涉及using embedded resources,这不是最简洁的解决方案。

答案 1 :(得分:2)

如果你的意思是在运行时打开,程序实际上在bar \ bin \ debug(或bar \ bin \ release)中运行,所以你需要考虑到这一点。

通常我会做类似的事情:

#if DEBUG
filename = @"..\..\baz\asd";
#else
filename = @"baz\asd";
#endif

答案 2 :(得分:2)

文件的相对位置是解决方案目录。因此,要在VS IDE中打开它,可以在“命令”窗口或“标准”工具栏上的“查找”文本框中键入(Ctrl-D):

>open bar\baz\asd

如果您想在运行时执行此操作,则需要使用您的应用程序分发源文件,因为没有任何保证它将在解决方案树附近的任何位置执行。

如果你想从VS加载项中执行此操作,我确信有一个表示解决方案的类,您可以使用它来枚举其中的项目,然后枚举bar项目中的文件条目。

答案 3 :(得分:0)

将一个简单的Target添加到Build文件中可能会更好(项目文件 - 用于C#的csproj)。在文本模式下打开csproj文件并添加:

<小时/>   &lt; Target Name =“AfterBuild”&gt;     &lt; Copy SourceFiles =“&lt; SourceFileLocationRelativeToPrjFile&gt; \&lt; SourceFilename&gt;” DestinationFiles = “LT; SourceFilename&gt;” 中/&GT;
  &LT; /目标&GT;

MS Build会将文件复制到正确的位置 - 无论您的配置(调试/发布)是什么,都是正确的文件夹。

如果你对发布感兴趣,你需要加倍努力,但我想,你现在不要求它 - 所以,保持简单。