2009-07-03 29 views
15

のDirectoryInfoを持っているディレクトリに新しいのFileInfoを作成:C#の:あなたはたとえば持っているとき、私はちょうど思っていた

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

そのディレクトリに新しいファイルを追加する簡単/明確な方法はありますこれより?

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

私はDirectoryInfoは、例えばGetFiles()方法を持っている意味...私はおそらく何かが、すでにそれはここで見ることができない存在する場合、拡張メソッドまたは何かを作るが、好奇心旺盛できると思っています。

+0

あなたの質問内のコードはIMO私に権利(私は本当にここに値を追加していないよとのwikiとしてマーク...) –

答えて

19

それはあなたがやりたいことは何ですか?タイトルには「新しいファイルを作成する」と書かれています。 FileInfoオブジェクトはファイルではありません。これはファイルに関する情報を保持するオブジェクトです(存在する場合もありません)。実際ににファイルを作成する場合は、ファイルを作成するには、いくつかの方法があります。注意点として

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

:あなたの代わりにFileInfoオブジェクトに基づいてファイルを作成したい場合は、以下のアプローチを使用することができます

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

:最も簡単な方法の一つは、このなり、それdir.FullNameであり、dir.FullPathではありません。

+0

ああ、良い呼び出し。 FullPathは保護されたフィールドでした。 FullNameはプロパティです。ちょっと速すぎてMSDNのメンバーページをスキャンしただけです:) – Svish

2

なぜあなたは使用しないでください。

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

または

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

について調べ、OPは正しいです+ –

+0

ではなくPath.Combineを使用しています。私はDirectoryInfoとファイル名を持っているためです。両方とも一緒ではありません。 – Svish

1

Directorynfo.GetFiles()メソッドが存在しますが、ディスク上に実際に存在するファイルのみが返されます。 Path.Combineは仮説的なパスです。

これらの拡張メソッドを試してみてください。

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

.NETフレームワークがリッチタイプのパスをカプセル化することにそれ以上は向かないというのは残念です。彼らは 'FileInfo'と' DirectoryInfo'をスキップして 'Path'をインスタンス型にすることができました。今日は文字列しか持たない多くの型安全性があります。 –