我似乎找不到比以下方法更有效的方法来将嵌入式资源“复制”到磁盘:using (BinaryReader reader = new BinaryReader( assembly.GetManifestResourceStream(@"Namespace.Resources.File.ext"))){ using (BinaryWriter writer = new BinaryWriter(new FileStream(path, FileMode.Create))) { long bytesLeft = reader.BaseStream.Length; while (bytesLeft > 0) { // 65535L is < Int32.MaxValue, so no need to test for overflow byte[] chunk = reader.ReadBytes((int)Math.Min(bytesLeft, 65536L)); writer.Write(chunk); bytesLeft -= chunk.Length; } }}似乎没有更直接的方法来进行复制,除非我丢失了某些东西...
3 回答
慕田峪9158850
TA贡献1794条经验 获得超7个赞
资源(文件)是否为二进制。
File.WriteAllBytes("C:\ResourceName", Resources.ResourceName);
并且如果资源(文件)是文本。
File.WriteAllText("C:\ResourceName", Resources.ResourceName);
拉丁的传说
TA贡献1789条经验 获得超8个赞
实际上,我最终只使用了这一行: Assembly.GetExecutingAssembly().GetManifestResourceStream("[Project].[File]").CopyTo(New FileStream(FileLocation, FileMode.Create))。当然,这是针对.Net 4.0
更新:我发现上面的行可能保持文件锁定,以便SQLite报告该数据库是只读的。因此,我得出以下结论:
Using newFile As Stream = New FileStream(FileLocation, FileMode.Create)
Assembly.GetExecutingAssembly().GetManifestResourceStream("[Project].[File]").CopyTo(newFile)
End Using
- 3 回答
- 0 关注
- 530 浏览
添加回答
举报
0/150
提交
取消