2017-12-31 115 views
1

내 프로젝트 파일 탐색기에 data.txt 파일이 있습니다. 이 텍스트 파일에서 데이터를 읽으 려하지만, 시도 할 때마다 결과가 null이되고 프로그램이 중단됩니다. 내가 작성한 코드는 다음과 같습니다.Xamarin 폼 텍스트 파일에서 읽기 결과가 null입니다.

public MapPage() 
{ 
    var assembly = typeof(MapPage).GetTypeInfo().Assembly; 
    Stream stream = assembly.GetManifestResourceStream("Mapper.data.txt"); 

    string text = ""; 
    using (var reader = new System.IO.StreamReader(stream)) 
    { 
     text = reader.ReadToEnd(); 
    } 
} 

이 코드 블록을 사용하면 스트림이 항상 null이됩니다. 여기에 프로젝트 파일 탐색기는 다음과 같습니다

Project file explorer

나는 속성에서 포함 리소스로 텍스트 파일을 선택합니다.

Embedded Resource

+0

https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/files/#Embedding_in_Shared_Projects가이 코드는 나를 위해 작동하지 않습니다 – Nkosi

답변

0

드디어 해결책을 찾았 참조. 그것을 해결하는 좋은 방법은 아니지만 작동합니다. 내 문제는 텍스트 파일의 경로가 작동하지 않는다는 것입니다. 프로그램이 텍스트 파일을 읽을 수 없습니다. 그러나이 코드를 사용하면 프로그램 자체에서 텍스트 파일의 경로를 찾아서 사용합니다.

private void LoadData() 
{ 
    var assembly = typeof(MapPage).GetTypeInfo().Assembly; 
    foreach (var res in assembly.GetManifestResourceNames()) 
    { 
     if(res.Contains("data.txt")) 
     { 
      Stream stream = assembly.GetManifestResourceStream(res); 

      using (var reader = new StreamReader(stream)) 
      { 
       string data = ""; 
       while((data = reader.ReadLine()) != null) 
       {   
        var array = data.Split(' '); 
        dataArray.Add(new SensorModel() 
        { 
         left = Convert.ToInt32(array[0]), 
         right = Convert.ToInt32(array[1]), 
         front = Convert.ToInt32(array[2]) 
        }); 
       } 
      } 
     } 
    } 
} 
3

으로 아래 참조 문서를 통해 지적, 당신이 가지고있는 코드는 PCL/.NET 표준 프로젝트이다. 당신이 공유 프로젝트 유형을 사용하는 경우에 당신은 내가 두 시나리오를 테스트 한 그들이 동일한 코드를 사용하여 작업을 수행 등 즉 Mapper.IOS 접두사, Mapper.Droid,

를 통해 장치 유형을 대상으로합니다 귀하의 질문에 있지만 IOS, Droid 등에 대한 접두사를 사용하여 공유 프로젝트 유형.

public MainPage() 
{ 
    #if __IOS__ 
    var resourcePrefix = "Mapper.iOS"; 
    #endif 
    #if __ANDROID__ 
    var resourcePrefix = "Mapper.Droid"; 
    #endif 
    #if WINDOWS_PHONE 
    var resourcePrefix = "Mapper.WinPhone"; 
    #endif 

    var assembly = typeof(MainPage).GetTypeInfo().Assembly; 
    Stream stream = assembly.GetManifestResourceStream($"{resourcePrefix}.data.txt"); 
    string text = ""; 

    using (var reader = new System.IO.StreamReader(stream)) 
    { 
     text = reader.ReadToEnd(); 
    } 
} 

Xamarin.Forms : Loading Files Embedded as Resources in Shared Projects

+0

공유 프로젝트에 포함 된 리소스에 대해 구체적으로 문서이 발견 . 스트림이 여전히 null이됩니다. – esdoodle