2009-04-27 6 views
6

Questo è in relazione a questo altro SO question che chiede come sovrascrivere un file esistente.Perché File.Open è molto meglio di File.Create per sovrascrivere un file esistente?

La risposta superiore è questo:

FileStream file = File.Open("text.txt", FileMode.Create); 

La mia risposta è stata questa:

FileStream fs = System.IO.File.Create(fileName); 

Come di quando ho scritto questa domanda, il conteggio era 14-0 in favore di Open.

Se voti sono un'indicazione del bene contro soluzioni negative, questo mi rende chiedo un po ':

C'è qualcosa che mi manca in questi metodi che renderebbero chiaramente che molto meglio di scegliere Open su Create?

risposta

6

Per me, so esattamente cosa fa File.Open("...", FileMode.Create) perché posso passare il mouse su FileMode.Create e mi dice che creerà un nuovo file ogni volta. File.Create("...") non ha questo suggerimento che indica che lo farà.

+1

Questo mi ha fatto ridere un po '. Decisione di codifica su un suggerimento. Divertente, ma immagino che sia un discrimatore buono quanto qualsiasi dato che fornisce più informazioni, che è fondamentale per lo sviluppo. Sembra casuale, ma in realtà ha un senso. Grazie :) –

0

Beh, anche io risposto con Create ma Open è davvero la soluzione migliore come si indica che si desidera aprire un file e con il FileMode.Create si indica che si desidera creare il file se non esiste già esistere. Penso che sia abbastanza chiaro.

+1

Immagino. Ma non è il Crea più succinto? Inoltre, l'Open ha il flag FileMode.Create, che a mio avviso lo rende un po 'più confuso: "Voglio aprire, ma crearlo." contro "Voglio creare, non mi interessa cosa c'era prima". C'è qualche caso in cui (a parte queste semantiche) che Open sarebbe effettivamente migliore? Cioè Crea avrebbe alcuni altri effetti collaterali che Open non lo fa? –

0

In primo luogo, penso che potresti leggere troppo. Io, ad esempio, tendo a votare la prima risposta corretta e trascurando ogni altra risposta ... quindi arrivarci prima aiuta un po '.

Secondo, File.Open legge meglio di System.IO.File.Open, anche se sono uguali.

In terzo luogo, Create non è semanticamente rilevante come Open, dal punto di vista della leggibilità. Se si desidera creare E aprire un file, il primo è più esplicito.

+0

Forse sto leggendo troppo. Sapevo che nel momento in cui ho finito di digitare la risposta, qualcuno probabilmente mi avrebbe "battuto" alla prima risposta. Ciò che mi fa meravigliare è che altre domande "più difficili" o "interessanti" potrebbero non essere tanto in voga quanto quella domanda. Era una domanda facile, quindi di solito non vedevo il voto così alto per qualcosa che richiede 2 secondi su google o msdn per rispondere. Immagino che la dicitura esplicita di "Open" dia una semantica leggermente migliore di "Crea". –

+2

@Brian: vota semplicemente la prima risposta perché è la prima risposta è un'assurdità totale. Le buone risposte dovrebbero essere votate, non le prime risposte. –

+0

@divo: Non potrei essere più d'accordo.Si chiama pigrizia. Solo essere onesti. Penso che accada tutto il tempo, però :) –

2

C'è solo un posto che conosco si potrebbe cercare una risposta a questo: Reflector

E si scopre sia chiamata new FileStream(... con una serie completa di argomenti!

+0

Beh, questo è esattamente quello che sto dicendo. Entrambi finiscono per chiamare lo stesso codice. Immagino che sia una questione di persone che gradiscono "Apri" su "Crea", dal momento che rende un po 'più ovvio che stai recuperando un file che è aperto e pronto a partire. –

Problemi correlati