2017-08-30 13 views
2

web.configを変更する必要がありますので、変更が必要な箇所まで読んでから変更を加えてからファイルに更新します。ファイルから読み込んでCで更新するにはどうすればいいですか?

それでは、ファイルが含まれているとしましょう:

<add key="Version_PSM" value="2.2.0"/> 
<add key="Version_MLF" value="2.0.3"/> 

そして私は、バージョンPF Version_PSMに "2.1" に更新する必要がありました。これを行う最善の方法は何ですか?私は、FileStreamを開いて、それを使用してStreamReaderとStreamWriterを作成しようとしましたが、動作しません。ファイルの行を読み込んで、私が更新したいキーを探しているときに、Writerはファイルの先頭に定位置にとどまるので、書き込むときには読み込んだものを上書きしません。ファイル。作家の位置を進めますが、ファイルには何が複製

// Repeat in a loop until I find what I'm looking for... 
string readLine = sr.ReadLine(); 
sw.WriteLine(readline); 

:だから最初、私はこのような何かを試してみました。私は、私が更新したいテキストを上書きするようにライターを配置し、それ以外はすべてそのまま残しておく必要があります。

だから、僕は試してみました:

readLine = sr.ReadLine(); 
sw.WriteLine(); 

をちょうどファイルに空白が書き込まれていること。

ここで私はちょうど行方不明です簡単な答えがあるはずです!

+1

LINQ to XMLまたは別のXML読み取り/書き込みライブラリは、ここに行く正しい方法です – BradleyDotNET

+0

AppSettings? ConfigurationManager? – Hackerman

+0

実行時にweb.configを更新する場合は、[この質問](https://stackoverflow.com/questions/719928/how-do-you-modify-the-web-config-appsettings-at)をご覧ください。 -ランタイム)。実行時に設定を変更すると、Webアプリ**が**再起動することに注意してください。 – stuartd

答えて

2

インストール中に値を変更する必要があるため、LINQ to XMLを使用して問題を解決できます(using System.Xml.Linq;)。通常のweb.configファイルには、あなたが自分の名前や属性に基づいてノードにアクセスして編集することができます

<?xml version="1.0" encoding="utf-8"?> 
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 
    <appSettings> 
    <add key="Version_PSM" value="2.2.0" /> 
    <add key="Version_MLF" value="2.0.3" /> 
    </appSettings> 
</configuration> 

のように見えます。いくつかの値を変更した後、変更を保存することができます。次の例では、Version_PSMの値を変更しています。あなたが正しく名前空間を扱うことがわかるように、この場合には少しトリックです。

//Specify path 
string webConfigFile = @"\web.config"; 

//Load the document and get the default configuration namespace 
XDocument doc = XDocument.Load(webConfigFile); 
XNamespace netConfigNamespace = doc.Root.GetDefaultNamespace(); 

//Get and edit the settings 
IEnumerable<XElement> settings = doc.Descendants(netConfigNamespace + "appSettings").Elements(); 
XElement versionPsmNode = settings.FirstOrDefault(a => a.Attribute("key").Value == "Version_PSM"); 
versionPsmNode?.Attribute("value").SetValue("New value"); 

//Save the document with the correct namespace 
doc.Root.Name = netConfigNamespace + doc.Root.Name.LocalName; 
doc.Save(webConfigFile); 
+0

ありがとう@Fruchtzwerg。今私の問題は、web.configに欠けている値を追加する必要があることと、私はそれを行う方法を理解することができないということです。 doc.Descendants(netConfigNamespace + "appsettings")。Elements()。add(KeyValuePair)、しかしそれは動作しません。 web.configに新しい値を追加するにはどうしたらいいですか? –

+0

属性を持つ新しい 'XElement'を' appSettings'ノードに追加する必要があります。新しいXAttribute( "value"、 "newValue(" value "、" newSet "))を追加してください。 ")));' – Fruchtzwerg

+0

あなたは天才です@Fruchtzwerg!ありがとうございます - それは完璧に動作します! –

関連する問題