2009-07-03 6 views
15

Je me demandais si vous avez par exemple:C#: Création d'un nouveau FileInfo dans un répertoire que vous avez le DirectoryInfo de

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

Y at-il un moyen plus facile/plus clair pour ajouter un nouveau fichier dans ce répertoire que cela?

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

Je pense que je peux probablement faire une méthode d'extension ou de quelque chose, mais curieux de savoir si quelque chose existe déjà qui ne peut voir ici ... Je veux dire la DirectoryInfo méthode n'ont GetFiles() par exemple.

+0

Le code dans votre question semble correcte à moi (marqué comme wiki que je ne suis pas vraiment d'ajouter la valeur ici ...) –

Répondre

19

Qu'est-ce que vous voulez faire? Le titre dit "Créer un nouveau fichier". Un objet FileInfo n'est pas un fichier; c'est un objet contenant des informations sur un fichier (qui peut exister ou non). Si vous voulez réellement créer le fichier, il existe un certain nombre de façons de le faire. L'une des façons serait-ce plus simple:

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

Si vous voulez créer le fichier basé sur le lieu objet FileInfo, vous pouvez utiliser l'approche suivante:

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"); 
    } 
} 

Comme une note de côté: il est dir.FullName, et non dir.FullPath.

+0

oh, bon appel. FullPath était un champ protégé. FullName est la propriété. J'ai juste scanné la page des membres MSDN un peu trop vite :) – Svish

2

Pourquoi ne pas utiliser:

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

ou

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

l'OMI, l'OP est correcte using Path.Combine plutôt que + –

+0

Parce que j'ai le DirectoryInfo et un nom de fichier. Pas les deux ensemble. – Svish

1

Bien qu'il existe des méthodes Directorynfo.GetFiles(), ils retournent uniquement les fichiers qui existent réellement sur le disque. Path.Combine concerne les chemins hypothétiques.

Essayez ces méthodes d'extension:

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

J'ai toujours été déçu que le framework .NET ne soit pas allé plus loin pour encapsuler des chemins dans un type riche. Ils auraient pu ignorer 'FileInfo' et' DirectoryInfo', ont fait de 'Path' un type d'instance, et nous aurions beaucoup de sécurité de type où aujourd'hui nous n'avons que des chaînes. –