Aggiorna file XML contro sovrascrittura file XML [chiuso]

0

Ho un'applicazione console che apporta modifiche a 1200 sistemi in remoto usando SCCM. Uno degli elementi da modificare è un'app del menu GUI che è pilotata dall'XML per visualizzare pulsanti che lanciano altre applicazioni. Devo cambiare XML.

Cambiare l'XML non sarebbe terribilmente difficile, ma sovrascrivere il file sarebbe un gioco da ragazzi. Dovrei semplicemente includere l'XML con la mia app per console. Le autorizzazioni dovrebbero essere uguali in entrambi i casi. C'è un modo preferito o consigliato o è solo la scelta del rivenditore?

Modifica: il file di destinazione è un file app.config della dimensione di 10 KB. App.config deve essere coerente su tutte le workstation di destinazione. Ho accesso al file app.config originale. Posso pre-aggiornare il file e inviare una copia insieme alla mia app di aggiornamento.

    
posta Darkwater23 03.10.2015 - 21:04
fonte

3 risposte

4

Quali sono le dimensioni previste dei file con cui si avrà a che fare? Gli aggiornamenti sul posto sono più complessi e senza una ragione significativa per fare altrimenti la sostituzione è la strada da percorrere. È più facile da capire e codificare e come ulteriore vantaggio, se ti devi preoccupare di una scrittura interrotta, è più facile renderla sicura (nel senso che il peggio è che perdi il nuovo file).

    
risposta data 03.10.2015 - 22:59
fonte
3

Hai avuto diverse risposte interessanti, ma per quello che stai discutendo - la distribuzione di un file di configurazione critico su oltre un migliaio di macchine - dovresti invece seguire un protocollo di sostituzione atomica. Il punto è rendere impossibile all'applicazione di vedere mai un file di configurazione parzialmente completo o che il processo di aggiornamento fornisca un file parziale.

  1. Crea un nuovo file temporaneo sulla stessa unità in cui si trova il file esistente.
  2. Apri il nuovo file, scrivi la nuova configurazione e chiudilo.
  3. Sostituisci atomicamente il vecchio file con il nuovo file.

Il modo in cui fai # 3 dipende dall'ambiente che stai utilizzando. Ad esempio, in .NET, questo sarebbe il metodo System.IO.File.Replace() .

    
risposta data 04.10.2015 - 14:20
fonte
2

Come aggiorneresti in modo affidabile un file XML o qualsiasi altro documento, senza sovrascriverne almeno una parte? Forse ho frainteso la domanda, ma supponiamo di avere il seguente file:

<xml>
  <menuItems>
    <item>Foo</item>
  </menuItems>
</xml>

E vuoi sovrascrivere il valore Foo con Foo2 . Come avresti intenzione di farlo? Dovresti calcolare la nuova dimensione del file, riallocare la dimensione del file, spostare tutto dopo "Foo" in su di un carattere, e poi scrivere il nuovo carattere 2 nella buca. Ora immagina di farlo con diversi aggiornamenti diversi nel file, alcuni più piccoli del contenuto originale e altri più grandi. Diventa un compito non banale. Per questo motivo, credo che quasi tutte le app che scrivono i file su disco sostituiscano il file originale con la copia modificata dalla memoria. L'app consente al sistema operativo / al file system di preoccuparsi di riallocare lo spazio.

E per quanto riguarda le prestazioni, la maggior parte dei carichi di lavoro non verrà migliorata cercando di sovrascrivere i pezzi del file originale perché a livello del disco, l'I / O avviene nei blocchi.

    
risposta data 03.10.2015 - 23:47
fonte

Leggi altre domande sui tag