2017-02-18 2 views
2

Android 및 iOS 용 Xamarin.Form PLC를 작성하고 텍스트 파일 삽입 리소스에 응용 프로그램을 작성해야하는 곳이 있습니다. 난 그냥에서는 StreamReader를 사용하여 동일한 구문을 성공적으로 같은 텍스트 파일 읽기 구현했습니다,하지만 StreamWriter는 구현은 다음과 같습니다 Xamarin.Forms의 StreamWriter에서 ArgumentException이 발생했습니다.

   Assembly assembly = GetType().GetTypeInfo().Assembly; 
       string resource = "jetStream.Results.settings.txt"; 
       using (Stream stream = assembly.GetManifestResourceStream(resource)) { 
        using (StreamWriter writer = new StreamWriter(stream)) { 
         //do stuff 
        } 
       } 

에서는 StreamWriter가의 인수 던지고

System.IO에서 "스트림이 쓰기 가능하지 않다" .StreamWriter. 나는 obvsiously 틀린 무엇인가하고 있냐? 동일한 어셈블리/리소스/스트림 구성을 사용하여 스트림을 읽을 수는 있지만 쓰기 가능하지 않은 이유는 무엇입니까?

+1

앱 패키지 내부의 리소스에 쓰려고합니다. 패키지에 서명이되어 있고 쓸 수 없습니다 (iOS에서도 마찬가지 임). 파일에 쓰려면 패키지 구조의 일부가 아닌 쓰기 가능한 폴더를 선택해야합니다. – Jason

답변

2

GetManifestResourceStream의 스트림은 쓸 수 없습니다. 스트림 파일은 빌드시 어셈블리에 포함되며 변경할 수 없습니다. 쓰기 전에 디스크에 파일을 작성해야합니다.

string resource = "jetStream.Results.settings.txt"; 
using (Stream stream = assembly.GetManifestResourceStream(resource)) 
using (var fs = new FileStream(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal)), FileMode.Create, FileAccess.Write)) 
using (var stream = new MemoryStream()) 
using (var writer = new StreamWriter(fs)) 
{ 
    rStream.Stream.CopyTo(stream); 
    writer.Write(stream.ToArray()); 
} 

이렇게하면 디스크의 파일을 읽고 쓸 수 있습니다.

1

작성하려는 내용에 따라 응용 프로그램 설정과 같은 것일 경우 Application.Properties 컬렉션 http://www.kymphillpotts.com/exploring-xamarin-forms-1-3-properties-dictionary/을 사용할 수 있습니다. 그렇지 않으면 Jon의 대답에 동의합니다.

+1

Application.Properties에 대해 몰랐는데, 매우 유용 할 것 같습니다. 내가 묻고있는 경우, 이것이 완벽한 해답입니다! (upvote). Jon에게 녹색 체크 표시를하는 것은 어느 시점에서 디스크에 응용 프로그램 설정 이상을 쓸 필요가 있기 때문에 허용 된 대답을 모두 제공하고자 함입니다. –

+0

덕분에 괜찮습니다. 행복하게 도와주었습니다. –

관련 문제