特定のディレクトリにあるファイルを作成したい。例: C:\x\y\z\aTextFile.txt
この操作では、ファイルを作成するためのディレクトリを作成する必要があります。
Directory.CreateDirectory(@"C:\x\y\z\");
File.Create(@"C:\x\y\z\aTextFile.txt");
しかし、この操作を1行のコードで実行できるのは本当に不思議です。
どんな助けやアイデアも大歓迎です。
特定のディレクトリにあるファイルを作成したい。例: C:\x\y\z\aTextFile.txt
この操作では、ファイルを作成するためのディレクトリを作成する必要があります。
Directory.CreateDirectory(@"C:\x\y\z\");
File.Create(@"C:\x\y\z\aTextFile.txt");
しかし、この操作を1行のコードで実行できるのは本当に不思議です。
どんな助けやアイデアも大歓迎です。
シンプル:関数を追加する
void MySingleLineOfCodeFunction(string path, string filename)
{
Directory.Createdirectory(path);
File.Create(filename).Dispose();
}
次に、1行のコードを使用します。
MySingleLineOfCodeFunction(@"C:\x\y\z\", "a.txt");
私が言おうとしているのは、コード間に違いはないということです。中にはマイクロソフトの人たちが書いたものもあれば、私たち普通の人たちが書いたものもあります。しかし、コンピューターは違いを生みません。:)
残念ながら、やりたいことを実行するコードは 1 行もありません。
なんで?マイクロソフトの組み込み関数で実行したとしても、内部的には 2 つのメソッドが呼び出されるためです。1 つはディレクトリ作成用、もう 1 つはファイル作成用です。
ただし、Petar Ivanovが言ったように、コード行をメソッドにして1行で呼び出すことでコード行を減らすことができます
また
静的拡張メソッドを作成できます。このようにして、インスタンスを作成せずに他の場所で使用できます。(インスタンスが作成される1行を減らしました)。
@Petar_Ivanov からの回答を変更して、ファイル パスに基づいて親ディレクトリを計算しました。同様の機能が必要な他のユーザーにとって役立つかもしれないと考えました。
public void CreateFile(string filePath)
{
if (!File.Exists(filePath))
{
var parent = Directory.GetParent(filePath);
Directory.CreateDirectory(parent.FullName);
File.Create(filePath).Dispose();
}
}
私の知る限り、.NET フレームワークで同時にディレクトリを作成するファイル作成方法はありません。
「ディレクトリのチェック/作成、次にファイルの作成」というパターンがコード内で何度も繰り返される場合は、メソッドで実装する必要があります。
ファイルを作成するには、いいえ、ディレクトリが存在する必要があります。Visual Basic のファイル フレンドリなクラスを使用しても、最初にディレクトリを作成する必要があります。興味深いのは、移動するとフォルダが作成されることです。
CreateFile からhttp://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx
ディレクトリ
アプリケーションは CreateFile を使用してディレクトリを作成できないため、このユース ケースの dwCreationDisposition には OPEN_EXISTING 値のみが有効です。ディレクトリを作成するには、アプリケーションで CreateDirectory または CreateDirectoryEx を呼び出す必要があります。
主に私のコードブロックにあります。ファイル作成パーツの直前にフォルダーの存在を処理します。
public void CheckCreatePath(fileName)
{
string filePath = Directory.GetParent(fileName).ToString();
if (!Directory.Exists(filePath))
Directory.CreateDirectory(filePath);
}
そしてただ使う
CheckCreatePath("C:\\TEMP\\TESTPath\\myFile.txt");
あなたのコードブロックで。