C# 将 MP4 资源保存到文件

本文关键字:存到文件 资源 MP4 | 更新日期: 2023-09-27 18:37:08

我已经尝试了几种不同的方法,但它在保存时无法打开。我怎样才能做到这一点?

基本上,我希望能够将当前是资源文件的 MP4 文件保存到我可以作为路径访问的临时位置。

这是我尝试过的东西:

    public static void WriteResourceToFile(string resourceName, string fileName)
    {
        using (Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
        {
            if (s != null)
            {
                byte[] buffer = new byte[s.Length];
                char[] sb = new char[s.Length];
                s.Read(buffer, 0, (int)(s.Length));
                /* convert the byte into ASCII text */
                for (int i = 0; i <= buffer.Length - 1; i++)
                {
                    sb[i] = (char)buffer[i];
                }
                using (StreamWriter sw = new StreamWriter(fileName))
                {
                    sw.Write(sb);
                    sw.Flush();
                }
            }
        }}

C# 将 MP4 资源保存到文件

你把它复杂化了。

尝试这样的事情(注意,没有编译或测试,Stream.CopyTo() 只存在于 .NET 4.0 及更高版本中)。

using (Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)))
using (FileStream fs = File.Open("c:'myfile.mp4", FileMode.Create))
{
    s.CopyTo(fs);
}

工作完成。

如果没有可用的 .NET 4.0,则需要自行实现一个,如下所示: 如何将一个流的内容复制到另一个流?

若要获取当前程序集中所有资源名称的列表,请执行如下操作:

Assembly a = Assembly.GetExecutingAssembly();
foreach (string s in a.GetManifestResourceNames())
{
    Console.WriteLine(s);
}
Console.ReadKey();

获取控制台上出现的内容,并将其传递给我发布的第一个片段中的 GetManifestResourceStream()。

http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getmanifestresourcenames.aspx

为什么要将 MP4 编写为字符串?您应该写出字节而不加修改。转换为字符正在修改数据。使用 FileStream 调用并调用 Write 方法。

你可以尝试这样的事情:

我粘贴了错误的代码...对不起,我赶时间

[HttpPost]
public ActionResult Create(VideoSermons video, HttpPostedFileBase videoFile)
{
    var videoDb = new VideoSermonDb();
    try
    {
        video.Path = Path.GetFileName(videoFile.FileName);
        video.UserId = HttpContext.User.Identity.Name;
        videoDb.Create(video);

        if (videoFile != null && videoFile.ContentLength > 0)
        {
            var videoName = Path.GetFileName(videoFile.FileName);
            var videoPath = Path.Combine(Server.MapPath("~/Videos/"),
                                         System.IO.Path.GetFileName(videoFile.FileName));
            videoFile.SaveAs(videoPath);
        }
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

这实际上将视频文件加载到目录中,但它也应该适用于您的格式。

-谢谢