2011-09-15 3 views
1

그래서 리소스로 추가 된 몇 가지 XML 파일이있는 C# 응용 프로그램을 작성하고 있습니다. 이 XML 파일에서 XML 직렬화를 사용하여 코드의 객체를 채우고 완벽하게 작동합니다. 그래서 나는 (단지 중요한 비트를 가지고, 나는 몇 가지 코드 남겨 두었다)과 같이 파일에 액세스 할 수 있습니다직렬화를 통해 XML 리소스 파일에 쓰기

using TestApp.Properties; 

XmlSerializer serializer = new XmlSerializer(typeof(MapTiles)); 
StringReader sr = new StringReader(Resources.Maps); 
mapTiles = (MapTiles)serializer.Deserialize(sr); 

지금 그러나, 나는 반대 할 싶습니다. 일부 데이터를 가져 와서이 XML 리소스 파일에 쓰고 싶습니다. 그러나 나는이 부분에 문제가있는 것 같아 누군가가 내가 어수선한 것을 볼 수 있거나 내가해야 할 일을 알려주 길 바라고 있었다. 여기에 내가 할 노력하고있어 무엇을 : 그래도 난이 코드를 실행하면, 내가 경우 ArgumentException이 처리되지 않은 였다고 2 줄에 오류가

XmlSerializer serializer = new XmlSerializer(typeof(MapTiles)); 
TextWriter writer = new StreamWriter(Resources.Maps); 
serializer.Serialize(writer, tempGroup); 
writer.Close(); 

- 빈 경로 이름이 법적 없습니다.

아무도 생각이 없으면 몇 가지 팁을 크게 주시면 감사하겠습니다. 정말 고마워.

+0

응용 프로그램 실행간에 또는 메모리에서만 자원 내용을 유지하려고합니까? –

+0

네, XML 파일의 내용을 실행 사이에서 데이터를 읽을 수 있도록 유지하려고합니다. 변경 사항이 데이터에 적용되고 XML 파일에 저장할 수 있기를 원합니다. – cardician

답변

2

Resources.Maps을 StreamWriter로 전달하기 때문에 예외가 발생합니다. StreamWriter는 이것을 문자열로 처리하고 스트림의 파일 경로라고 가정합니다. 그러나 파일 경로가 비어있어 예외가 발생합니다.

StreamWriter 행을 수정하려면 Resources.Maps 대신 로컬 임시 파일을 지정하거나 StringWriter을 기본 생성자와 함께 사용하십시오. 예 : new StringWriter().

.resx 파일을 작성하는 경우 ResXResourceWriter이 필요한 클래스입니다. 또한 스트림을 쓰는 것도 처리 할 것입니다. http://msdn.microsoft.com/en-us/library/system.resources.resxresourcewriter.aspxhttp://msdn.microsoft.com/en-us/library/ekyft91f.aspx을 참조하십시오. 두 번째 페이지는 클래스를 사용하는 방법에 대한 예제를 가지고 있지만이 같은 부를 것이다 breifly : 당신이 그것에 동적으로 생성 된 자원을 가지고 어셈블리를 작성하려는 경우

XmlSerializer serializer = new XmlSerializer(typeof(MapTiles)); 

using (StringWriter stringWriter = new StringWriter()) 
{ 
    serializer.Serialize(stringWriter, tempGroup); 

    using (ResXResourceWriter resourceWriter = new ResXResourceWriter("~/App_GlobalResources/some_file.resx")) 
    { 
    resourceWriter.AddResource("Maps", stringWriter.ToString()); 
    } 
} 

는 새 어셈블리를 방출 할 수있다 . 이 경우에는 여기를보십시오 http://msdn.microsoft.com/en-us/library/8ye65dh0.aspx.

0

Resources.Maps가 빈 문자열이므로 StreamWriter 생성자가 예외를 throw하고 있습니다.

체크 아웃 MSDN에 대한 설명서 : http://msdn.microsoft.com/en-us/library/fysy0a4b.aspx

+0

나는 데이터를 쓰는 올바른 방법이 무엇인지 묻는다. 리소스 자체가 파일이고 파일에 내용이 있으면 리소스가이를 보여줍니다. 그것은 어쨌든 경로를 보여주지 않습니다.리소스 파일을 사용하여 작성하는 방법이 있는지 아니면 GetManifestResourceStream을 다른 방법으로 사용하고 다른 경로로 이동해야하는지 궁금합니다. – cardician

0

흠, 몇 가지 다른 일을 시도하고 문제가 응용 프로그램의 일부인 자원에 쓸 수 있다는 것을 나타납니다 연구 더 많은 일을 한 후. 리소스가 어셈블리에 쓰여지기 때문에 쓰기가 불가능합니다. 따라서 접근 방식을 수정하고 출력을 다른 파일에 작성해야합니다.

물론 누구나 다르게 알지 않는 한. 이것은 내가 지금까지 발견 한 것입니다. 그래도 아이디어가있는 분들께 감사드립니다.

관련 문제