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

我似乎找不到比以下方法更有效的方法来将嵌入式资源“复制”到磁盘:


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;

        }

    }

}

似乎没有更直接的方法来进行复制,除非我丢失了某些东西...


慕尼黑的夜晚无繁华
浏览 532回答 3
3回答

慕田峪9158850

资源(文件)是否为二进制。File.WriteAllBytes("C:\ResourceName", Resources.ResourceName);并且如果资源(文件)是文本。&nbsp;File.WriteAllText("C:\ResourceName", Resources.ResourceName);

拉丁的传说

实际上,我最终只使用了这一行: Assembly.GetExecutingAssembly().GetManifestResourceStream("[Project].[File]").CopyTo(New FileStream(FileLocation, FileMode.Create))。当然,这是针对.Net 4.0更新:我发现上面的行可能保持文件锁定,以便SQLite报告该数据库是只读的。因此,我得出以下结论:Using newFile As Stream = New FileStream(FileLocation, FileMode.Create)&nbsp; &nbsp; Assembly.GetExecutingAssembly().GetManifestResourceStream("[Project].[File]").CopyTo(newFile)End Using
打开App,查看更多内容
随时随地看视频慕课网APP