2014-03-19 1 views
1

File.ReadAllLines()을 사용하여 리소스 텍스트 파일 (단어)에서 읽으려고합니다. 하지만 때마다 나는 오류 메시지가 경로에 잘못된 문자가 실행됩니다. 어떤 아이디어?파일에서 읽지 못했습니다. 경로에 잘못된 문자가 있습니까?

//Get all of the words from the text file in the resources folder 
string[] AllWords = File.ReadAllLines(Conundrum.Properties.Resources.Words); 
+0

.txt 파일에 대한 리소스 파일은 다음과 같습니다. –

+0

파일 디렉토리의 전체 이름은 무엇입니까? – Ben

+0

원본 디렉토리가 내 데스크탑 이었지만 리소스 파일에서 액세스하려고했습니다. –

답변

0

그것은, 그러나. 당신이 전달하고자하는 경로의 값을 모른 채이 진단은 C# 기능 Path.GetInvalidFileNameChars()Path.GetInvalidPathChars()을 확인하기 어렵다. 이것들로, 당신의 길에 무엇이 잘못되었는지 알아내는 것이 쉽습니다!

var path = Conundrum.Properties.Resources.Words; 
var invalidPathChars = path.Where(Path.GetInvalidPathChars().Contains).ToArray(); 
if (invalidPathChars.Length > 0) 
{ 
    Console.WriteLine("invalid path chars: " + string.Join(string.Empty, invalidPathChars)); 
} 

var fileName = Path.GetFileName(path); 
var invalidFileNameChars = fileName .Where(Path.GetInvalidFileNameChars().Contains).ToArray(); 
if (invalidFileNameChars .Length > 0) 
{ 
    Console.WriteLine("invalid file name chars: " + string.Join(string.Empty, invalidFileNameChars)); 
} 

리소스 파일의 경우 일반적으로 어셈블리로 컴파일되지 않으므로 디스크의 원시 형식으로는 사용할 수 없습니다. 기본 제공 속성 또는 Assembly.GetManifestResourceStream()을 사용하여 검색 할 수 있습니다.

2

가 실제로 자원으로 프로젝트에 추가되는 경우 그냥 직접 참조하십시오 :

var allWords = Conundrum.Properties.Resources.Words; 

당신은 배열의 개행 문자에 분할을 원하는 경우 :

var allWords = Conundrum.Properties.Resources.Words 
       .Split(new[] { Environment.NewLine }, StringSplitOptions.None); 

I을 그냥 밖으로 시도하고 그 날 위해 일했습니다. File.ReadAllLines을 사용하면 같은 예외가 발생합니다 ... 실제로 디스크의 파일로 이어지는 전체 파일 경로가 필요하다고 가정합니다.

+0

맞아, 나는 갈거야. –

0

나는 몇 가지 시도를 해봤지만, 이것이 가장 잘 작동하는 것 같습니다.

string resource_data = Properties.Resources.Words; 
string[] AllWords = resource_data.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); 
관련 문제