반응형

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





반응형
반응형

3.x 코딩을 작업하다가 4.x로 작업하다보면 경고 메세지가 뜨는 부분이 있다. 

문서를 자세히 살펴봤으면 미리 수정할 수 있는 부분이지만, 경고메세지를 먼저 보게되어

해당 관련 이슈를 찾아 보니 있어 남겨 놓는다. 

 warning CS0618: `UnityEngine.GameObject.SetActiveRecursively(bool)' is obsolete: `gameObject.SetActiveRecursively() is obsolete. Use GameObject.SetActive(), which is now inherited by children.'

바로 위의 경고 메세지가 나왔을때 대처 할 수 있는 내용은 http://bit.ly/YBUvaf 페이지를 통해서 확인후 수정이 가능하다. 

기존에 사용하던 GameObject.SetActiveRecursively() 함수는 더이상 사용되지 않는다. 

4.x 버전에서는 해당 오브젝트 하위의 노드까지 알아서 정리하게 된다.

고로, GameObject.SetActive() 함수로 대체 되어야 한다. 

 

반응형

+ Recent posts