2011-09-15 17 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.aspxおよびhttp://msdn.microsoft.com/en-us/library/ekyft91f.aspxを参照してください。 2ページ目は、クラスを使用する方法の例を持っていますが、このような何かを呼び出します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コンストラクターが例外をスローしています。

は、MSDNのドキュメントをチェックアウト: http://msdn.microsoft.com/en-us/library/fysy0a4b.aspx

+0

私が理解していることは、データを書き出す正しい方法は何かということです。リソース自体がファイルであり、ファイルに何かがある場合、リソースはそれを示しています。とにかくパスは表示されません。私は、リソースファイルを使用して記述する方法があるのか​​、GetManifestResourceStreamを何らかの方法で使用し、それを使って書くという別のルートに移動しなければならないかどうか疑問に思っています。 – cardician

0

をうーん、いくつかの他のものを試し、さらに研究を行った後、問題はあなたがアプリケーションの一部であるリソースへの書き込みができないことであることが表示されます。アセンブリに書き込まれるリソースと何かが関係しているため、書き込みできません。だから私は私のアプローチを変更し、別のファイルに出力を書き込む必要があります。

もちろん、誰もが別のことを知っていない限り。これは今まで私が発見したものです。しかし、いくつかのアイデアを持っていた人に感謝します。

関連する問題