2012-06-14 4 views
0

몇 가지 방법을 시도했지만 저장시 열리지 않습니다. 이것을 어떻게 할 수 있습니까?C# MP4 리소스를 파일에 저장하는 중

기본적으로 현재 리소스 파일 인 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(); 

       } 
      } 
     }} 
+2

* 정확하게 * 시도 하시겠습니까? 너 뭐 해봤 니? 일부 코드 게시 ... – tomfanning

+0

axwindowsmediaplayer 플러그인에서 리소스 비디오를 재생하려고합니다. –

답변

1

당신은 그것을과 복잡함을하고 있습니다.

참고 (컴파일되지 않았거나 테스트되지 않았으며 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); 
} 

작업 완료. 이렇게, 현재 어셈블리에서 리소스 이름을 모두의 목록을 얻으려면 How do I copy the contents of one stream to another?

: 사용 가능한 .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

+0

리소스 이름의 예를 들어 줄 수 있습니까? 나는 그것이 내가 위로 빠져 나가는 곳이라고 생각한다. –

+0

답변이 업데이트되었습니다. – tomfanning

+0

사용 가능한 유일한 리소스는 ..... Resources.resources –

0

가 왜 문자열로 MP4를 작성 :

는 여기에 내가 해봤 뭔가? 수정하지 않고 바이트를 써야합니다. 문자로 변환하면 데이터가 수정됩니다. FileStream 호출을 사용하고 Write 메서드를 호출합니다.

+0

그게 더 합리적입니다. 코드에 대한 문맥에서 FileStream 메서드를 사용하는 방법에 대해 간략히 설명해 주시겠습니까? –

+0

File.Create를 사용하여 FileStream을 열고 Stream.CopyTo 메서드를 사용하여 리소스를 FileStream에 복사합니다. – usr

+0

나는 어리석은 느낌이 들지만, 나는 아직도 손해를보고있다. –

-1

이 뭔가를 시도해 볼 수도 있습니다 : 나는

가 미안 ....에서 잘못된 코드를 붙여 서둘러이 실제로 디렉토리에 비디오 파일을로드

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

} 

에서 이었지만, 당신의 포맷에도 잘 맞아야합니다.

고마워요,

+0

Eh? 이것은 전혀 이해가되지 않습니다! 이 질문에 아무런 관련이 없습니다. – tomfanning

+0

당신의 권리. 나는 잘못된 코드를 붙였습니다. 나는 서둘러 .... 감사합니다. – ironman

관련 문제