2010-06-07 7 views
2

실제로 EXE에 일부 파일을 저장하여 선택한 위치에 복사하는 것이 유용합니다. HTML 및 JS 파일을 생성 중이며 일부 CSS, JS 및 GIF를 복사해야합니다.C# EXE 파일에 파일 저장

니핏

System.IO.File.WriteAllBytes (@ "C : \ myfile.bin에"ProjectNamespace.Properties.Resources.MyFile);

나를 위해 작동하지 않습니다!

"WriteAllBytes"에

는 말한다 : 이 이미지 " '바이트 []'에 'System.Drawing.Bitmap'에서 변환 할 수 없습니다"와 이 " '[] 바이트'에 '문자열'에서 변환 할 수 없습니다" 텍스트 파일 용.

도움말!

업데이트 : 아래에서 해결되었습니다.

+1

문제를 해결 한 경우 가장 유용한 답 옆의 녹색 확인 표시를 클릭하십시오. –

답변

0

프로젝트 리소스에 파일을 추가하고 "빌드 동작"을 "포함 리소스"로 설정하십시오.

WriteResourceToFile("Project_Namespace.Resources.filename_as_in_resources.extension", "extractedfile.txt"); 


public static void WriteResourceToFile(string resourceName, string fileName) 
{ 
    int bufferSize = 4096; // set 4KB buffer 
    byte[] buffer = new byte[bufferSize]; 
    using (Stream input = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) 
    using (Stream output = new FileStream(fileName, FileMode.Create)) 
    { 
     int byteCount = input.Read(buffer, 0, bufferSize); 
     while (byteCount > 0) 
     { 
      output.Write(buffer, 0, byteCount); 
      byteCount = input.Read(buffer, 0, bufferSize); 
     } 
    } 
} 

는이 문서에 따라 올바른 얼마나 깊이 알고하지 마십시오 :

지금이 조각을 사용하여 모든 파일 (텍스트 또는 바이너리) 추출 http://www.yoda.arachsys.com/csharp/readbinary.html 을하지만 작동합니다.

6

솔루션에 파일을 추가 한 다음 Build Action 속성을 Embedded Resource으로 설정하십시오. 이렇게하면 exe에 파일이 포함됩니다. (msdn)

그러면 exe가 실행될 때 디스크에 파일을 쓰도록 코드를 작성하면됩니다. 같은

뭔가 :

File.Copy("resource.bmp", @"C:\MyFile.bin"); 

이 파일 이름으로 resource.bmp를 교체합니다.

부록 : 당신은 당신이 resource.bmp 경로의 하위 폴더 부분을 내리는 데 필요한 솔루션의 하위 폴더에 파일을 유지하는 경우

. 예를 들면 :

또한
File.Copy(@"NewFolder1\resource.bmp", @"C:\MyFile.bin"); 

, 당신은 Copy Always 또는 Copy If NewerCopy To Output Directory 속성을 설정해야 할 수도 있습니다.

+0

맞습니다. "임베디드 리소스"여야하지만 여기서는 File.Copy() 만 작동하지 않습니다. 해결책을 찾았습니다. – user360393

+0

그것은 나를 위해 ... "resource.bmp"를 올바른 파일 이름으로 변경 했습니까? –

+0

Shure. 그러나 그렇지 않습니다. File.Copy()는 텍스트 파일에서만 작동합니다. 여기 내 솔루션을 남겼습니다. – user360393

1

프로젝트 등록 정보 창을 통해 파일을 추가했다고 가정합니다. 그건 당신이 임의의 파일을 추가 할 수는 없지만 TextFiles, 비트 맵 등을 지원합니다. 내장이 TextFile를 들어

, 이미지에 대한

File.WriteAllText(@"C:\MyFile.bin", Properties.Resources.TextFile1); 

를 사용

Properties.Resources.Image1.Save(@"C:\MyFile.bin"); 
0

당신 를 사용할 수있는 .resx 파일에 포함 바이너리 파일. 파일 섹션에 넣으십시오 (대신 이미지 섹션을 사용한 것 같습니다). .resx 파일이 .Designer.cs 파일을 생성하면 바이트 배열로 액세스 할 수 있어야합니다.

File.WriteAllBytes(@"C:\foobar.exe", Properties.Resources.foobar);