在C#中将嵌入式资源作为文件复制到磁盘

GPX*_*GPX 9 c# embedded-resource

我有一个INF文件保存为我的C#项目中的嵌入式资源.我试图按需将此文件保存到本地位置.我正在使用这种方法.

public static void SaveResourceToDisk(string ResourceName, string FileToExtractTo)
{
    Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream(ResourceName);
    FileStream resourceFile = new FileStream(FileToExtractTo, FileMode.Create);

    byte[] b = new byte[s.Length + 1];
    s.Read(b, 0, Convert.ToInt32(s.Length));
    resourceFile.Write(b, 0, Convert.ToInt32(b.Length - 1));
    resourceFile.Flush();
    resourceFile.Close();

    resourceFile = null;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试调用此方法(传递资源名称和命名空间名称)时,我收到错误:

你调用的对象是空的

我在这做错了什么?

Ben*_*key 9

你可以打电话

System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
Run Code Online (Sandbox Code Playgroud)

并检查哪些嵌入式资源是可访问的.然后你可以将它与你传入的内容进行比较,看看你是否确实完成了你的预期.

此外,您应该考虑使用using关键字来处理您的流:

using(FileStream ResourceFile = new FileStream(FileToExtractTo, FileMode.Create))
{
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)

祝好运.


A-S*_*ani 5

这是保存嵌入资源的最简单方法:

  var stream = assembly.GetManifestResourceStream("name of the manifest resourse");
  var fileStream = File.Create(@"C:\Test.xml");
  stream.Seek(0, SeekOrigin.Begin);
  stream.CopyTo(fileStream);
  fileStream.Close();
Run Code Online (Sandbox Code Playgroud)