2009-07-03 9 views
15

Mi stavo chiedendo quando si ha per esempio:C#: Creazione di un nuovo FileInfo in una directory che si ha la DirectoryInfo di

var dir = new DirectoryInfo(@"C:\Temp"); 

C'è un/modo più semplice più chiaro per aggiungere un nuovo file in questa directory di questo?

var file = new FileInfo(Path.Combine(dir.FullName, "file.ext")); 

Sto pensando che posso probabilmente solo fare un metodo di estensione o qualcosa del genere, ma curioso di sapere se qualcosa esiste già che non può vedere qui ... mi riferisco al DirectoryInfo ha GetFiles() metodo per esempio.

+0

Il codice nella tua domanda sembra circa la destra a me (contrassegnato come wiki come io non sono davvero un valore aggiunto qui ...) –

risposta

19

Che cosa è che si vuole fare? Il titolo dice "Creazione di un nuovo file". Un oggetto FileInfo non è un file; è un oggetto contenente informazioni su un file (che può o non può esistere). Se si desidera effettivamente il creare il file, ci sono diversi modi per farlo. Uno dei modi più semplici sarebbe questo:

File.WriteAllText(Path.Combine(dir.FullName, "file.ext"), "some text"); 

Se si desidera creare il file in base all'oggetto FileInfo, invece, è possibile utilizzare il seguente approccio:

var dir = new DirectoryInfo(@"C:\Temp"); 
var file = new FileInfo(Path.Combine(dir.FullName, "file.ext")); 
if (!file.Exists) // you may not want to overwrite existing files 
{ 
    using (Stream stream = file.OpenWrite()) 
    using (StreamWriter writer = new StreamWriter(stream)) 
    { 
     writer.Write("some text"); 
    } 
} 

Come nota a margine: si è dir.FullName, non dir.FullPath.

+0

oh, buona chiamata. FullPath era un campo protetto. FullName è la proprietà. Ho appena scansionato la pagina dei membri di MSDN un po 'troppo velocemente :) – Svish

2

Perché non usare:

File.Create(@"C:\Temp\file.ext"); 

o

var dir = new DirectoryInfo(@"C:\Temp"); 
File.Create(dir.FullName + "\\file.ext"); 
+6

IMO, l'OP è corretto in utilizzando Path.Combine anziché + –

+0

Perché ho DirectoryInfo e un nome file. Non entrambi insieme. – Svish

1

Mentre esistono i metodi Directorynfo.GetFiles(), restituiscono solo i file effettivamente presenti sul disco. Path.Combine riguarda percorsi ipotetici.

provare questi metodi di estensione:

public static FileInfo CombineWithFileName(this DirectoryInfo directoryInfo, string fileName) 
    { 
     return new FileInfo(Path.Combine(directoryInfo.Name, fileName)); 
    } 

    public static DirectoryInfo CombineWithDirectoryName(this DirectoryInfo directoryInfo, string directoryName) 
    { 
     return new DirectoryInfo(Path.Combine(directoryInfo.Name, directoryName)); 
    } 
+6

Sono sempre stato deluso dal fatto che .NET Framework non andasse oltre per incapsulare i percorsi in un tipo ricco. Potrebbero aver saltato 'FileInfo' e' DirectoryInfo', reso 'Path' un tipo di istanza, e avremmo un sacco di sicurezza del tipo in cui oggi abbiamo solo stringhe. –

Problemi correlati