.NET 어셈블리에 텍스트 파일을 포함시키는 방법은 무엇입니까?
디스크에서 텍스트를 읽을 필요없이 텍스트를로드 할 수 있고 필요한 모든 것이 exe 내에 포함되도록 어셈블리에 텍스트 파일을 포함하고 싶습니다. (더 휴대하기 쉽도록)
이것을 할 수있는 방법이 있습니까? 리소스 파일이 있다고 가정합니까?
그리고 가능하다면 어떻게하고 어떻게 프로그래밍 방식으로 텍스트를 문자열로로드합니까?
프로젝트 파일을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하십시오.
열린 창에서 자원 탭으로 이동하고 탭 페이지 중간에 파란색 링크 만있는 경우이를 클릭하여 새 자원을 작성하십시오.
그런 다음 탭 페이지 위의 도구 모음에서 새 텍스트 파일을 추가하고 이름을 지정하면 프로젝트에 추가되어 열립니다.
이 방법을 익히면 코드에 Resources.TheNameYouGaveTheTextFileHere를 입력하면 해당 내용에 액세스 할 수 있습니다. 클래스에서 Resources 클래스를 처음 사용하는 경우 using 지시문을 추가해야합니다 (Resources를 입력 한 후 Ctrl +.를 눌러 VS가이를 수행하도록 메뉴를 가져 오십시오).
위의 설명에 대해 분명하지 않은 내용이 있으면 의견을 남겨주세요. 완성 될 때까지 편집 해 보겠습니다. :)
Visual Studio 2003, Visual Studio 2005 및 이전 버전 (2008에서도 작동)에서 텍스트 파일을 프로젝트에 포함한 다음 '속성'패널에서 작업을 '내장 리소스'로 설정할 수 있습니다. 그런 다음을 사용하여 파일을 스트림으로 액세스 할 수 있습니다 Assembly.GetManifestResourceStream(string)
.
여기에 다른 답변이 더 편리합니다. 나는 이것을 완전성을 위해 포함시킨다.
이 방법은 이미지, 아이콘, 사운드 등과 같은 다른 유형의 파일을 임베드하는 데 효과적입니다.
텍스트 파일을 포함시킨 후 다음과 같은 코드에서 해당 파일을 사용하십시오.
global::packageName.Properties.Resources.ThatFileName
예, 맞습니다-리소스 파일을 만드십시오. 문자열을 "로드"할 필요가 없으면 Resource.WhateverStringYouDefined로 참조됩니다.
여기 내가 한 일이 있습니다.
- 프로젝트를 마우스 오른쪽 단추로 클릭하여 Visual Studio에서 내 파일 (리소스)을 추가했습니다.
- 추가 한 모든 파일을 마우스 오른쪽 버튼으로 클릭하고 "빌드 유형"을 포함 된 리소스로 변경하십시오.
자원에 액세스하려면 다음을 수행하십시오.
ㅏ. 함수를 사용하여 현재 어셈블리를 얻었습니다.
GetExecutingAssembly()
비. 내가 추가 한 리소스는 텍스트 파일이므로를 사용하여 스트림으로 읽습니다
GetManifestResourceStream(fileName)
. 파일 이름에 액세스하는 방법은GetManifestResourceNames()
씨. 이제
StreamReader()
클래스를 사용하여 원하는 경우 파일 끝을 변수로 읽으십시오.
여기 나를 위해 일한 것이 있습니다. (실행 파일 .NET 이미지 파일에 포함 된 파일의 내용을 읽어야했습니다.)
작업을 수행하기 전에 파일을 Visual Studio의 솔루션에 포함 시키십시오. (내 경우에는 VS 2017 Community.)으로 전환 Solution Explorer
한 다음 마우스 오른쪽 버튼으로 클릭 한 Properties
폴더를 선택 Add Existing Item
하고 파일을 선택했습니다 . (Say,. FileName.txt
) 그런 다음 여전히에있는 동안 Solution Explorer
포함 된 파일을 마우스 오른쪽 버튼으로 클릭 Properties
하고을 선택한 다음 Build Action
로 선택 합니다 Embedded Resource
.
그런 다음이 코드를 사용하여 바이트를 읽으십시오.
string strResourceName = "FileName.txt";
Assembly asm = Assembly.GetExecutingAssembly();
using( Stream rsrcStream = asm.GetManifestResourceStream(asm.GetName().Name + ".Properties." + strResourceName))
{
using (StreamReader sRdr = new StreamReader(rsrcStream))
{
//For instance, gets it as text
string strTxt = sRdr.ReadToEnd();
}
}
이 경우 허용 된 답변 에서 제안한대로 해당 파일을 리소스로 추가 할 필요 가 없습니다 .
현재 어셈블리를 얻으려면 Pavan의 답변에 추가하십시오 (일반 섹션).
Assembly _assembly;
GetManifestResourceStream (fileName) (코드에서 리소스를 읽어야하는 경우) :
try
{
_assembly = Assembly.GetExecutingAssembly();
_textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("*Namespace*.*FileName*.txt"));
}
catch
{
Console.WritelLine("Error accessing resource!");
}
참고 URL : https://stackoverflow.com/questions/433171/how-to-embed-a-text-file-in-a-net-assembly
'IT story' 카테고리의 다른 글
팬더 : 여러 열의 두 데이터 프레임을 병합 (결합) (0) | 2020.07.20 |
---|---|
심이 란? (0) | 2020.07.20 |
PuTTY를 통해 Vi (Vim)에서 숫자 키패드 사용 (0) | 2020.07.20 |
AngularJS-$ http.post가 JSON 대신 요청 매개 변수를 보내는 방법은 무엇입니까? (0) | 2020.07.20 |
특정 문자 또는 문자 집합에 대한 셀 확인 (0) | 2020.07.20 |