디스크에서 읽을 필요없이 텍스트를로드 할 수 있도록 어셈블리에 텍스트 파일을 포함하고 필요한 모든 항목이 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로 참조됩니다.
답변
여기에 저에게 효과적이었습니다. (실행 가능한 .NET 이미지 파일에 포함 된 파일의 내용을 읽어야했습니다.)
작업을 수행하기 전에 Visual Studio의 솔루션에 파일을 포함합니다. (제 경우는 VS 2017 커뮤니티입니다.)으로 전환 Solution Explorer
한 다음 Properties
폴더 를 마우스 오른쪽 버튼으로 클릭 Add Existing Item
하고 파일을 선택 하고 선택했습니다. (예를 들어, 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();
}
}
이 경우 수락 된 답변 에서 제안 된대로 해당 파일을 리소스로 추가 할 필요 가 없습니다 .
답변
내가 한 일은 다음과 같습니다.
- 프로젝트를 마우스 오른쪽 단추로 클릭하여 Visual Studio에 내 파일 (리소스)을 추가했습니다.
- 추가 한 모든 파일을 마우스 오른쪽 버튼으로 클릭하고 “Build Type”을 Embedded Resource로 변경합니다.
-
리소스에 액세스하려면 :
ㅏ. 함수를 사용하여 현재 어셈블리를 얻었습니다.
GetExecutingAssembly()
비. 추가 한 리소스는 텍스트 파일이므로 다음을 사용하여 스트림으로 읽었습니다.
GetManifestResourceStream(fileName)
. 파일 이름에 액세스하는 방법은 다음을 호출하는 것입니다.GetManifestResourceNames()
씨. 이제 원하는 경우
StreamReader()
클래스를 사용하여 파일 끝까지 변수로 읽어보십시오.
답변
Pavan의 대답에 추가 하여 현재 어셈블리를 가져옵니다 (일반 섹션).
Assembly _assembly;
GetManifestResourceStream (fileName) (리소스에서 읽기가 필요한 코드) :
try
{
_assembly = Assembly.GetExecutingAssembly();
_textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("*Namespace*.*FileName*.txt"));
}
catch
{
Console.WritelLine("Error accessing resource!");
}