Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将MP4资源保存到文件_C#_File_Resources_Mp4 - Fatal编程技术网

C#将MP4资源保存到文件

C#将MP4资源保存到文件,c#,file,resources,mp4,C#,File,Resources,Mp4,我尝试了几种不同的方法,但保存后无法打开。我怎样才能做到这一点 基本上,我希望能够将当前作为资源文件的MP4文件保存到临时位置,我可以将其作为路径访问 以下是我尝试过的一些东西: public static void WriteResourceToFile(string resourceName, string fileName) { using (Stream s = Assembly.GetExecutingAssembly().GetManifestRes

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

基本上,我希望能够将当前作为资源文件的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();

                }
            }
        }}
public静态void WriteResourceToFile(字符串resourceName,字符串文件名)
{
使用(流s=Assembly.GetExecutionGassembly().GetManifestResourceStream(resourceName))
{
如果(s!=null)
{
字节[]缓冲区=新字节[s.Length];
char[]sb=新字符[s.Length];
s、 读取(缓冲区,0,(int)(s.Length));
/*将字节转换为ASCII文本*/

对于(int i=0;i为什么要将MP4作为字符串写入?您应该不经修改地写出字节。您对字符的转换正在修改数据。使用FileStream调用并调用write方法。

您可以尝试以下操作:

Assembly a = Assembly.GetExecutingAssembly();
foreach (string s in a.GetManifestResourceNames())
{
    Console.WriteLine(s);
}
Console.ReadKey();
我粘贴了错误的代码…对不起,我赶时间

[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();
    }

}
这实际上会将视频文件加载到一个目录中,但它也适用于您的格式


-谢谢,

你把它复杂化了

尝试类似的方法(注意,未编译或测试,Stream.CopyTo()仅存在于.NET 4.0及更高版本中)

工作完成了

如果您没有可用的.NET 4.0,则需要自己实现一个,例如:

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

Assembly a = Assembly.GetExecutingAssembly();
foreach (string s in a.GetManifestResourceNames())
{
    Console.WriteLine(s);
}
Console.ReadKey();
获取控制台上出现的内容,并将其传递到我发布的第一个代码片段中的GetManifestResourceStream()中


你到底想做什么?你尝试过什么?发布一些代码…我正在尝试在axwindowsmediaplayer插件中播放资源视频。这更有意义。你能简单介绍一下如何在代码上下文中使用FileStream方法吗?使用File打开FileStream。创建并使用Stream.CopyTo方法将资源复制到t他是FileStream。呃?这根本没有任何意义!与问题无关。你能给我一个资源名称的例子吗?我想这就是我出错的地方。试着传入,它可能是你的MP4文件,取决于你对它的称呼。如果没有,你是否单击了你的MP4文件并选择了“嵌入式资源”?在这里看一看,了解如何在VS2010中使用嵌入式资源:-这样,您根本不需要在流上乱搞。非常感谢。原来我引用的是一个名称相似但略有不同的PDF,因为我以为我是先导入mp4的(它的名称是[name]1而不是[name]),所以它写了一个pdf到mp4。当我根据你的信息查看它时,我找到了它并修复了它。问题解决了。谢谢。不用担心。但我不知道为什么有人开车路过,对我的答案投了反对票。