2017-01-26 7 views
1

ASP .NETコアでは、既存のXMLファイルに属性のあるXML要素を追加しようとしています。ASP .NETコアからXMLファイルへの書き込み

string path = Server.MapPath("~/Data/foo.xml"); 
XDocument xdoc = XDocument.Load(path); 
    //Do stuff with XElement and XAttributes... 
xdoc.Save(path); 

しかし、ASP .NETのコアと、私はServer.MapPathの()を使用することはできません、だから私は完全なパスを取得:ASP NET 4.5では

、私はこの作業をするために以下のコードを使用しているだろう(Read more here

以下のコードをASP .NETコアで実行すると、 "xdoc.Save(pathToDataFile);を実行しようとすると" StringからSystem.IO.Streamに変換できません "という結果になります。 " ??

var contentRoot = hostingEnvironment.ContentRootPath; 
    string pathToDataFile = contentRoot + "\\Data\\foo.xml"; 
    XDocument xdoc = XDocument.Load(pathToDataFile); 
    //Do stuff with XElement and XAttributes... 
    xdoc.Save(pathToDataFile); 

なぜ「xdoc.Save()」はASP .NETコアでは動作しませんが、.NET 4.5では正常に動作していますか?

+0

も、.NETのコアにXDocumentのためのドキュメントを読んで、問題がクリアされている、.SAVEないストリームは、ファイルへのパス、データを保存していないので、ファイルおよびパスへのストリームを作成する予定それをSave関数に渡します。 – Gusman

答えて

4

.NETで利用可能なAPIコアは、フル.NETフレームワークで使用できるAPIのサブセットです。いくつかの分野では、.NET 4.5からほぼすべてが.NETコアで利用可能であることがわかりますが、必ずしもそうではありません。あなたはSaveメソッドのオーバーロード何でのVisual Studioとの外観を持っている場合は、あなたの場合は

は、あなたがこれらのものを見つけることができ、使用できます。

public void Save(Stream stream); 
public void Save(TextWriter textWriter); 
public void Save(XmlWriter writer); 
public void Save(Stream stream, SaveOptions options); 
public void Save(TextWriter textWriter, SaveOptions options); 

あなたがコンパイルエラーを持っている理由は、今ありますかなりクリアな。 .NET Coreでは、ドキュメントを保存するファイルパスを定義するstringを受け入れるオーバーロードはありません。

最初に目的のパスを指す書き込み可能なStreamを作成し、StreamSaveメソッドに渡す必要があります。参照のためfull .NET framework implementationを見ることができます。

+2

Thx。簡単なFileStreamで解決しました。 var fileStream =新しいFileStream(pathToDataFile、FileMode.Open); xdoc.Save(fileStream); – Andreas

2

私は同じ問題を抱えていて、FileStreamは私のために働いています。

FileStream fileStream = new FileStream("file.xml", FileMode.Create); 
XmlWriterSettings settings = new XmlWriterSettings() { Indent = true}; 
XmlWriter writer = XmlWriter.Create(fileStream, settings); 

ファイルが切り捨てられないように、次のコード行を使用してください。

writer.Flush(); 
fileStream.Flush(); 
関連する問題