2013-09-22 44 views
3

我使用的是.NET组件,使用期望与全路径名这样的字符串的方法读取特定的二进制文件:C#获取嵌入式资源的完整路径?

Read("c:\\somefile.ext"); 

我已经把somefile.ext在嵌入式资源我的项目。有没有什么办法可以将某种路径传递给组件的Read命令的嵌入式资源?

+2

嵌入的资源不具有“全路径名。”您不能像在文件系统中那样使用文件路径来引用它。你的组件是否有一个'Read'函数,它将采用'Stream'参数? –

+0

不幸的是它没有。所以最简单的选择是不嵌入它和'复制到输出目录'?谢谢!亚历克斯 – Corvinalex

回答

3

到资源的路径是形式namespace.projectfolder.filename.ext的。

为了阅读的内容,你可以使用一个辅助类,像这样的

public class ResourceReader 
{ 
    // to read the file as a Stream 
    public static Stream GetResourceStream(string resourceName) 
    { 
     Assembly assembly = Assembly.GetExecutingAssembly(); 
     Stream resourceStream = assembly.GetManifestResourceStream(resourceName); 
     return resourceStream; 
    } 

    // to save the resource to a file 
    public static void CreateFileFromResource(string resourceName, string path) 
    { 
     Stream resourceStream = GetResourceStream(resourceName); 
     if (resourceStream != null) 
     { 
      using (Stream input = resourceStream) 
      { 
       using (Stream output = File.Create(path)) 
       { 
        input.CopyTo(output); 
       } 
      } 
     } 
    } 
} 
+0

谢谢Shamp。这个帮助类可以很好地提取嵌入文件 – Corvinalex

+1

Stream类有一个CopyTo方法,可以用来代替你的CopyStream http://msdn.microsoft.com/en-us/library/dd782932.aspx – Jimmy

+0

谢谢@Jimmy。代码已更新。 – shamp00

0

您需要使用项目的名称空间以及嵌入资源的名称。例如,假设somefile.ext位于名为ProjectA的项目文件夹资源/文件中。该你应该使用阅读嵌入式资源的正确字符串是:

ProjectA.resources.files.somefile.ext