我在开发中遇到一个问题,我要在程序中打包某些文件进去,在执行指定函数时,就让它释放资源。
于是我在网上找到这样的方法。
Assembly asm = Assembly.GetExecutingAssembly(); //读取嵌入式资源
inStream = new BufferedStream(asm.GetManifestResourceStream("自解压.res.Adjprog.exe"));
outStream = new FileStream("D:\\test.exe", FileMode.Create, FileAccess.Write);
byte[] buffer = new byte[1024];
int length;
while ((length = inStream.Read(buffer, 0, buffer.Length)) > 0)
{
outStream.Write(buffer, 0, length);
}
outStream.Flush();
但是,这个案例代码有一个问题,如果打包进来的资源文件有好多个,就意味着我要再写一个文件清单,让程序按照清单来一个一次调用这个代码函数来释放文件。
这样工作量就有点大……
有没有什么办法可以让它直接把整个目录释放出来,而不是一个文件执行一次这样的代码释放文件?
使用反射
using System.Reflection;
for (int i = 0; i < Assembly.GetExecutingAssembly().GetManifestResourceNames().Length; i++)
string name=Assembly.GetExecutingAssembly().GetManifestResourceNames()[i];
用dir >filelist.txt命令,将需要打包的文件列表输出下。
然后你先释放filelist.txt,用File.ReadAllLines读取它,再根据它释放别的文件。
你可以把dir作为post build脚本,在编译的时候自动生成下,然后编译的时候自动嵌入进你的程序。