【问题标题】:Download Files From Resource Library in c# .net从 c# .net 中的资源库下载文件
【发布时间】:2012-05-18 01:20:00
【问题描述】:

我正在开发一个应用程序,用户必须从多个屏幕下载示例文件(excel)才能使用。最好的方法是什么。

我正在做的是

将文件放在应用程序正在执行的目录中,并使用 Application.StartupPath 下载文件。这听起来不是一个很好的解决方案。用户可以随时编辑文件或删除文件等。

我想做的是

我想添加资源中的所有文件并从资源中下载文件。我添加了文件,但我需要一些关于如何从资源中下载文件的帮助。

谢谢

【问题讨论】:

标签: c# .net stream filestream


【解决方案1】:

你可以使用:

 class ResourceHelper
    {
           public static void MakeFileOutOfAStream(string stream, string filePath)
            {
                using(var fs = new FileStream(filePath,FileMode.Create,FileAccess.ReadWrite))
                {
                    CopyStream(GetStream(stream), fs);
                }
            }

            static void CopyStream(Stream input, Stream output)
            {
                byte[] buffer = new byte[32768];
                int read;
                while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
                {
                    output.Write(buffer, 0, read);
                }
            }
 static Stream GetStream(string stream)
        {
             return Assembly.GetExecutingAssembly().GetManifestResourceStream(stream));

        }
    }

并且使用流传递资源的完整名称,即名称空间+资源文件名(evantual 文件夹将被视为名称空间部分)区分大小写。请记住将项目中的文件标记为嵌入资源

【讨论】:

  • 谢谢,请您更新您的代码并创建 ResourceManager 的管理器以使用 GetStream 方法,它也会帮助其他用户。谢谢
【解决方案2】:

您可以使用Assembly.GetManifestResourceStream 并将流保存在某个文件中以使用它。 这是一个简单的例子:

using (var resource = Assembly.GetManifestResourceStream("resource_key"))
using (var file = File.OpenWrite(filename))
{
    var buffer = new byte[1024];
    int len;
    while ((len = resource.Read(buffer, 0, buffer.Length)) > 0)
    {
        file.Write(buffer, 0, len);
    }  
}

请注意。无法将文件更改存储回资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多