为了账号安全,请及时绑定邮箱和手机立即绑定

将文件从程序集资源流写入磁盘

将文件从程序集资源流写入磁盘

慕尼黑的夜晚无繁华 2019-10-18 14:36:36
我似乎找不到比以下方法更有效的方法来将嵌入式资源“复制”到磁盘: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);


查看完整回答
反对 回复 2019-10-18
?
拉丁的传说

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


查看完整回答
反对 回复 2019-10-18
  • 3 回答
  • 0 关注
  • 530 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信