2012-06-06 7 views
5

特定のディレクトリにあるファイルを作成したいとします。 例:C:¥x¥y¥z¥a.txt1つのメソッド呼び出しでファイルとその親ディレクトリを作成する方法は?

この操作では、ファイルを作成するためのディレクトリを作成する必要があります。

Directory.Createdirectory("C:\x\y\z\"); 
File.Create("C:\x\y\z\a.txt"); 

しかし、私はこの操作を1行のコードで行うことができますか?

ご協力いただければ幸いです。

+2

.Netフレームワーク固有の方法を使用してこれを減らすことがなぜ重要なのですか? –

答えて

2

私が知る限り、.NETフレームワークで同時にディレクトリを作成するファイル作成メソッドはありません。

"ディレクトリチェック/作成、ファイル作成"のパターンがコード内で多く繰り返されている場合は、メソッドでそれを実装する必要があります。

2

シンプル:

void MySingleLineOfCodeFunction(string path, string filename) 
{ 
    Directory.Createdirectory(path); 
    File.Create(filename); 
} 

機能を追加して、単一のコード行を使用します。私が言うことをしようとしています何

MySingleLineOfCodeFunction(@"C:\x\y\z\", "a.txt"); 

は、コードの間に差がないということです。 それはマイクロソフトの人たちによって書かれていますが、他の人は普通の人です。しかし、コンピュータは違いはありません。 :)

+0

私はこのようなメソッドを持っていますが、可能であればこの2行のコードを1行に減らしたいと思います。 – ibrahimyilmaz

+2

メソッドに組み込むことで、1行に減らしました。これら2つのAPI呼び出しを呼び出すメソッドと、2つのAPI呼び出しを呼び出す一部のMicrosoft関数との間に違いはありません。それでも、ディレクトリ用とファイル用の2つの呼び出しを行う必要があります。 –

+0

私は組み込みのC#でこれを行う方法があると思いますが、方法はありません: – ibrahimyilmaz

2

残念ながら、あなたが望むことをするためのコードはありません。

なぜですか? Microsoftの組み込み関数によっても内部的には2つのメソッドが呼び出されるためです。 1つはディレクトリ作成用、その他はファイル作成用です。あなたがメソッドにそれらを作ることによって、コードのあなたのラインを削減し、ペタル・イワノフあなたは、静的な拡張メソッドを作成することができます

OR

を言ったように、単一の行でそれを呼び出すことができますしかし

。これにより、インスタンスを作成せずに他の場所でも使用できます。 (インスタンスが作成されている行を1行減らしました)。

+0

ファイルは静的なタイプなので、Fileの拡張メソッドを作成することはできません。 –

1

ファイルを作成するには、いいえ、ディレクトリが存在する必要があります。 Visual Basicのファイルフレンドリークラスでも、まずディレクトリを作成する必要があります。興味深いのは、移動するとフォルダが作成されるということです。

のCreateFile http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx

からディレクトリ

アプリケーションは、そのためだけOPEN_EXISTING値は、このユースケースのための dwCreationDispositionのために有効である、 のCreateFileを使用してディレクトリを作成することはできません。ディレクトリを作成するには、 アプリケーションは、私はファイルパスに基づいて、親ディレクトリを動作するように、@Petar_Ivanovから答えを変更したCreateDirectoryまたはCreateDirectoryEx

+0

+1。あなたは私にそれを打つ:)これは、.NETフレームワークの制限ではありませんが、それはWin32 APIの制限です。 –

0

呼び出す必要があり、それがかもしれない他の人に有用であるかもしれないと思いました同様の機能が必要です。

public void CreateFile(string filePath) 
    { 
     if (!File.Exists(filePath)) 
     { 
      var parent = Directory.GetParent(filePath); 
      Directory.CreateDirectory(parent.FullName); 
      File.Create(filePath); 
     } 
    } 

このアプローチの主な注意点は次のとおりです。 File.Createはファイルストリームを返します。そのため、クローズする必要があります。

0

ほとんどのコードブロックにあります。 ファイル作成の直前にフォルダの存在を処理します。

public void CheckCreatePath(fileName) 
{ 
    string filePath = Directory.GetParent(fileName).ToString(); 
    if (!Directory.Exists(filePath)) 
     Directory.CreateDirectory(filePath); 
} 

とちょうどあなたのコードブロックに

CheckCreatePath("C:\\TEMP\\TESTPath\\myFile.txt"); 

を使用しています。

関連する問題