C#

2016-04-12 61 views
0

bir yapılandırma dosyası güncelleme Ben birkaç istemci üzerinde çalışacak benim şirket sistemi için bir güncelleme oluşturuyorum ve iki yapılandırma dosyaları, eski yapılandırma dosyası ve daha yeni sürümü var. Her iki dosyayı da karşılaştırabildiğim ve eski dosyaya eklediğim farklılıkları ilk bakışta kontrol edebileceğim bir yol var mı? Dosyaların farklı bilgilere sahip olabileceğini ve eklemem/değiştirmem gereken tek şeyin anahtar olduğunu unutmayın. Örneğin, bir anahtar farklıysa, daha eski dosyalarda bir anahtar yoksa, bu yeni "sürüm" için daha eski bir değişiklik yapın.C#

anahtarlar aynı ada sahip olacaklardır ancak farklı değerlere sahip olabilirler. Artı orada doesnt eski dosyada mevcut yeni bir anahtar olabilir ve ben

Herhangi bir yardım

mutluluk duyacağız, görmek için ben dosyaların bir örneği bırakacaktır bunu

eklemem gerekiyor olabilir.

<configuration> 
    <appSettings> 
    <add key="ORCASRV1"   value="ORCA30|tcp://127.0.0.1:9001" /> 
    <add key="ORCASRV2"   value="REORCA30|tcp://127.0.0.1:9001" /> 
    <add key="ServidorEmail"  value="xxx" /> 
    <add key="SqlTrans"   value="1" /> 
    <add key="RemoteType"   value="0" /> 
    <add key="LocalPort"   value="9002" /> 
    <add key="LocalMsgStore"  value="1" /> 
    <add key="sqlCHAR_TO_DATA"  value="CONVERT(datetime, '#MM#/#DD#/#YYYY#')" /> 
    <add key="sqlDATA_TO_CHAR"  value="CONVERT(char(30), #CAMPO#)" /> 
    <add key="sqlDATAPARTE"  value="LTRIM(STR(DATEPART(#PARTE, #CAMPO#)))" /> 
    <add key="sqlNUM_TO_CHAR"  value="LTRIM(STR(#VALOR#))" /> 
    <add key="sqlSYSDATE"   value=" GetDate() " /> 
    <add key="sqlALIAS"   value=" As " /> 
    <add key="sqlCONCATENAR"  value="+" /> <add key="sqlNULL"    value="IsNull(#CAMPO#,#VALOR#)" /> 
    <add key="sqlROUND"   value="ROUND(#CAMPO#,#PARTE#)" /> 
    <add key="sqlLPAD"    value="RIGTH(REPLICATE('#CHAR#',#VEZES#)+#CAMPO#,#VEZES#)" /> 
    <add key="oraCHAR_TO_DATA"  value="TO_DATE('#MM#/#DD#/#YYYY#','MM/DD/YYYY')" /> 
    <add key="oraDATA_TO_CHAR"  value="TO_CHAR(#CAMPO#, 'DD/MM/YYYY')" /> 
    <add key="oraDATAPARTE"  value="TO_CHAR(#PARTE#, #CAMPO#)" /> 
    <add key="oraNUM_TO_CHAR"  value="TO_CHAR(#VALOR#)" /> 
    <add key="oraSYSDATE"   value=" SYSDATE " /> 
    <add key="oraALIAS"   value=" " /> 
    <add key="oraCONCATENAR"  value="||" /> 
    <add key="oraNULL"    value="NVL(#CAMPO#,#VALOR#)" /> 
    <add key="oraROUND"   value="ROUND(#CAMPO#,#PARTE#)" /> 
    <add key="oraLPAD"    value="LPAD(#CAMPO#,#VEZES#,#CHAR#)" /> 
    <add key="EmailCDP"   value="[email protected]" /> 
    <add key="EmailCliente"  value="xxx" /> 
    <add key="RPT_PATH1"   value="C:\PROD\ORCAREPORT\" /> 
    <add key="StartPage_Height" value="90" /> 
    <add key="StartPage_Margem" value="220" /> 
    <add key="StartPage_Espaco" value="5" /> 
    <add key="StartPage_Intervalo" value="2" /> 
    <add key="StartPage_Mais"  value="35" /> 
    <add key="HelpExec"   value="WINHLP32.EXE" /> 
    <add key="HelpFile"   value="ORCA.HLP" /> 
    <add key="LogLevel"   value="0" /> 
    <add key="LogSqlClient"  value="0" /> 
    <add key="LogFile"    value="C:\cdpsi\logs" /> 
    </appSettings> 
    <system.runtime.remoting> 
    <application> 
     <channels> 
     <channel ref="tcp" port="9002"> 
      <clientProviders> 
      <formatter ref="binary" />   <provider type="CdpCompress.CompressionClientSinkProvider, CdpCompress" /> 
      </clientProviders> 
     </channel> 
     </channels> 
    </application> 
    </system.runtime.remoting> 
</configuration> 
+0

nasıl bilecek? Dosyada aynı pozisyonda mı, değerler aynı mı? Yeni bir anahtar veya adın değiştirildiği bir anahtar arasında nasıl bir ilişki kurabilirsiniz? –

+0

anahtarlar aynı ada sahip olacaklardır ancak farklı değerlere sahip olabilirler. Ayrıca, eski dosyada bulunmayan yeni bir anahtar olabilir ve bunu eklemem gerekiyor –

+1

Bunu neden program aracılığıyla yapmak istiyorsunuz? Yapılandırma dosyası her gün değişmediği sürece, yazması gereken toplam anlamsız bir betiktir. Sadece bir kerelik bir şey için, neden dosyayı röntgenle karşılaştırıp el ile ekleme/güncelleme tuşları kullanmıyorsunuz? – jitendragarg

cevap

0

Kod böyle gitti ve bir cazibe gibi çalışır: İki farklı tuşlar ilişkin ise

public void UpdateService(string FilePathOld, string FilePathNew, string LatestVersion) 
{ 
     Dictionary<string, string> Old = new Dictionary<string, string>(); 
     Dictionary<string, string> New = new Dictionary<string, string>(); 

     if (ExisteFicheiro(FilePathNew) == true && ExisteFicheiro(FilePathOld) == true) 
     { 
      ExeConfigurationFileMap configOld = new ExeConfigurationFileMap(); 
      configOld.ExeConfigFilename = FilePathOld; 
      Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configOld, ConfigurationUserLevel.None); 

      ExeConfigurationFileMap configNew = new ExeConfigurationFileMap(); 
      configNew.ExeConfigFilename = FilePathNew; 
      Configuration config2 = ConfigurationManager.OpenMappedExeConfiguration(configNew, ConfigurationUserLevel.None); 

      KeyValueConfigurationCollection settings = config.AppSettings.Settings; 
      Old = settings.AllKeys.ToDictionary(key => key, key => settings[key].Value); 
      KeyValueConfigurationCollection settings2 = config2.AppSettings.Settings; 
      New = settings2.AllKeys.ToDictionary(key => key, key => settings2[key].Value); 

      foreach (var NewKey in New) 
      { 
       string value; 
       if (Old.TryGetValue(NewKey.Key, out value)) 
       { 
        if (value != NewKey.Value) 
        { 
         //if (ExistsKey(NewKey.Key, false) == true) 
         Old[NewKey.Key] = NewKey.Value; 

        } 
       } 
       else 
       { 
        Old.Add(NewKey.Key, NewKey.Value); 
       } 
      } 

      foreach (var NewKey in Old) 
      { 
       string key = NewKey.Key; 
       string value = NewKey.Value; 
       if (config.AppSettings.Settings[key] != null) 
       { 
        config.AppSettings.Settings[key].Value = value; 
        if (key == "Version") 
         config.AppSettings.Settings[key].Value = LatestVersion; 
       } 
       else 
       { 
        config.AppSettings.Settings.Add(key, value); 

       } 
       if (config.AppSettings.Settings["Version"] == null) 
       { 
        config.AppSettings.Settings.Add("Version", LatestVersion); 
       } 

      } 
      config.Save(); 
     } 
     else 
     { 
      Erro NovoErro = new Erro(); 
      Global.Erro = "O ficheiro \"OrcaService.exe.config\" ou o ficheiro \"Orca.exe.config\" não existem nos caminhos especificados!"; 
     } 

}