반응형

protected void SendReq(string htmlfile)
 {
 
     HttpWebRequest httpWebRequest =
         (HttpWebRequest)WebRequest.Create("http://www.abc.co.kr/" + htmlfile + ".htm");
     // 인코딩 1 - UTF-8
 
     //httpWebRequest.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
     // 인코딩 2 - EUC-KR
 
     httpWebRequest.ContentType = "application/x-www-form-urlencoded; charset=utf-8";
     httpWebRequest.Method = "POST";
 
 
     Stream requestStream = httpWebRequest.GetRequestStream();
 
     requestStream.Close();
 
     HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
     StreamReader streamReader = 
         new StreamReader(httpWebResponse.GetResponseStream(), Encoding.GetEncoding("EUC-KR"));    
     // Encoding.GetEncoding("EUC-KR")
     string html = streamReader.ReadToEnd();
     streamReader.Close();
     httpWebResponse.Close();
 
     //text.Value = html;
     richTextBox1.AppendText(html);
     savefile(htmlfile,html);
 
 }
 protected void savefile(string savename, string html)
 {
     FileStream fileStream = new FileStream(savename + ".htm", FileMode.Create, FileAccess.Write);
     StreamWriter streamWriter = new StreamWriter(fileStream, Encoding.GetEncoding("EUC-KR"));
     //streamWriter.Write(richTextBox1);
 
     //richTextBox1.AppendText(result);
 
     //streamWriter.Write(html);
     streamWriter.Write(richTextBox1.Text);
     streamWriter.Close();
     fileStream.Close();
 }
원문 : http://jameroid.tistory.com/entry/c-%EC%9B%B9-%ED%8E%98%EC%9D%B4%EC%A7%80-html-%EB%B0%9B%EC%95%84%EC%84%9C-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0

반응형
반응형

C#을 이용해서 데이터중 이미지나 텍스트를 실행파일에 포함했다가 사용해야 하는 경우가 종종 있다. 

이때 사용되어 지는 방법을 정리해본다. 


우선 리소스 데이터를 참조하기 위해서는 아래와 같이 참조 선언을 먼저 해준다. 

   using System.IO;
   using System.Reflection;


다음 어셈블리 정보를 일겅오기 위한 변수와 스트림 관련 변수등을 선언해 둔다. 

Assembly _assembly;
Stream _imageStream;
StreamReader _textStreamReader;


해당 실행중인 파일의 어셈블리 정보를 얻어와야 한다. 

 _assembly = Assembly.GetExecutingAssembly();


이제 각각의 읽어오고자 하는 파일을 스트림에 가져온다. 

 _imageStream = _assembly.GetManifestResourceStream("MyNameSpace.MyImage.bmp");

_textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.MyTextFile.txt"));


여기서 MyNameSpace 라는 항목이 중요하다. 보통은 이것을 파악 못하고 사용하면,
항상 null 값을 받환하기 때문에 컴파일후 실행 할때 new 할당하고 사용하라는 오류 메세지가 나온다. 

이부분은 뒤에서 다시 정리하기로 하고, 일단 이부분이 중요하다는 것을 확인해 둔다. 

실제 데이터를 읽어오는 부분을 정리하면,

try
{
  _assembly = Assembly.GetExecutingAssembly();
  _imageStream = _assembly.GetManifestResourceStream("MyNamespace.MyImage.bmp");
  _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));

}

catch
{
  MessageBox.Show("Error accessing resources!");
}


이제 사용하면 되는데 리소스 등록을 위해서 일반 소스파일이나 리소스 파일처럼 파일을 등록하고 

등록된 파일의 속성을 확인해본다. 


빌드 작업의 내용을 "포함 리소스" 항목으로 바꾸어야 컴파일후 리소스에 포함이 된다.

그러면 이제 컴파일하고 실행해보면 바로 정상 작동을 하느냐? 물론 잘 될수도 있겠지만, 대부분 
앞서 중요하다는 부분의 내용을 간파하고 진행했다면, 아마도 _assembly.GetManifestResourceStream() 호출 부분에서 에러가 나올 것이다. 

실제 포함된 파일의 정보는 namespace 정보가 들어가는데, "Resources" 같은 폴더 아래에 들어가 있다면
데이터 이름은 NamespaceName.Resource.실제데이터명"이라고 작성을 해야 한다. 

관련해서 인터넷에 서치해보면 꾀 많은 질문이 null 값으로 인해 문제시되는 이슈가 많다. 

자 그래서 한방에 해결하는 방법이 없을까 해서 찾아보니... 

어셈블러를 통해 리소스의 파일 이름들을 한꺼번에 얻어올 수 있는 함수가 있었다. 

 string[] resourceNames =
    Assembly.GetExecutingAssembly().GetManifestResourceNames();

바로 이녀석인데, 디버깅 모드에서 자신의 프로그램에 담겨져 있는 리소스 파일 이름을 파악할 수 있다. 
이것을 통해 내가 얻고자 하는 파일의 실제 긴 이름을 확인후 코드에 넣던가 하면 될 것이다. 

한참을 이것 때문에 삽질을 해서 정리해 둔다. 


참고 사이트 : http://support.microsoft.com/kb/319292/ko
                   http://stackoverflow.com/questions/3068736/cant-load-a-manifest-resource-with-getmanifestresourcestream





반응형
반응형
이번에 툴하나를 만들어 보기 위해 윈도우 도킹쪽 관련된 라이브러리를 사용하게 되었다. 
근데, WeifenLuo 라이브러리는 .NET 버전이 2.0 에 맞추어져 있다보니, 현재 사용중이 
개발 환경이 Visual Studio 2010에서 컴파일시 오류가 발생했다. 

대충 어셈블러 어쩌구 하면서 2.0.0.0 이라는 메세지가 뜰것이다 함마디로 닷넷 버전이 
안 맞아서 나오는 메세지다. [ System.Design version=2.0.0... ]

그래서 해결 방법은 우선 해당 프로젝트를 실제 개발하는 프로젝트에 가져와 추가한다. 
WeifenLuo 라이브러리는 소스포지에서 얻을 수 있다. 
svn을 이용해 소스를 받아와서 컴파일을 해야하는데, 역시 기본적인 상황으로 하면
.NET 2.0 버전으로 컴파일된다. 

참고로 Visual Studio 2010버전에서 컴파일을 하면, .NET 4.0 이상 버전에서 컴파일이
된다. 이점을 감안해서 References 의 등록된 System 항목들을 삭제하고, Project의 
Properties 에서 .NET 4.0 으로 옵션을 바꾼 상태에서 System들을 새로 .NET 4.0 버전으로
등록을 해준다. 

이때 System, System.Data, System.Design, System.Drawing, System.Windows.Forms, System.XML
이런 컴포넌트들을 새로운 버전으로 등록해야 한다.

자. 이렇게 해도 문제가 있다. 
바로 System.Design 버전이 안맞다고 나올것이다. 이것은, 기존에 새로 만든 프로젝트의 Properties 정보를
살펴보면, Target framework 정보가 .NET Framework 4 Client Profile 이라는 것이라서 System.Design이
빠져 있기 때문이다. 다시 말해 WeifenLuo  라이브러리에서는 쓰는데, 실제 적용하는 프로젝트에는 
System.Design 이 등록이 안되어 있으니 링크 충돌이 나는 것이다. 

자. 그럼 .NET Framwork 4로 바꾸고 다시 재컴파일을 해보면 쉽게 컴파일이 될것이다. 

자. 그럼 DockPanel을 실제 비쥬얼 스튜디어에서 등록해서 사용하기 위해서는 Toolbox에서 마우스
오른쪽 버튼을 눌러 Choose Itesms... 메뉴를 눌러서 .NET 탭에서 WeifenLuo  라이브러리를 선택해주면
Toolsbox에 해당 콤퍼넌트가 추가되어 있을 것이다. 



반응형

+ Recent posts