C#/。NETで空のファイルを作成する最も簡単な/正規の方法は何ですか?
これまでに見つけた最も簡単な方法は次のとおりです。
System.IO.File.WriteAllLines(filename, new string[0]);
C#/。NETで空のファイルを作成する最も簡単な/正規の方法は何ですか?
これまでに見つけた最も簡単な方法は次のとおりです。
System.IO.File.WriteAllLines(filename, new string[0]);
回答:
just File.Create
を使用するとファイルは開いたままになりますが、これはおそらく望んでいることではありません。
あなたは使うことができます:
using (File.Create(filename)) ;
それは少し奇妙に見えます、あなたに気をつけてください。代わりに中かっこを使用できます。
using (File.Create(filename)) {}
またはDispose
直接呼び出すだけです:
File.Create(filename).Dispose();
どちらにしても、これを複数の場所で使用する場合は、ヘルパーメソッドでラップすることを検討する必要があります。たとえば、
public static void CreateEmptyFile(string filename)
{
File.Create(filename).Dispose();
}
呼び出すことを注意Dispose
代わりに直接使用してusing
、それが唯一の方法-声明は本当に私の知る限り、ここであまり違いはありませんでしたスレッドがへの呼び出しの間に中止された場合には差があることを確認File.Create
しての呼び出しをDispose
。その競合状態が存在する場合、その値が返される直前にメソッドの最後でスレッドが中止された場合、バージョンにも存在すると考えられます...using
File.Create
using (File.Create(filename)) ;
、File.Create(filename).Dispose();
File.Create(filename).Dispose();
代わりに使用しています。
Close()
リソースも解放します。Close()
呼び出すだけ-github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/…をDispose
参照
using (new FileStream(filename, FileMode.CreateNew)) { }
File.WriteAllText("path", String.Empty);
または
File.CreateText("path").Close();
Encoding.UTF8
バイトオーダーマーク(BOM)を出力するエンコーダーを返します。を使用new UTF8Encoding(false)
して、BOMを出力しないUTF8エンコーダーを取得できます。
WriteAllText
以前のバージョンの.NETで実際に動作が異なるかどうかはわかりません。ただし、念のため、エンコード部分をスキップしてFile.WriteAllBytes(path, new byte[] { });
代わりに使用してください。
System.IO.File.Create(@"C:\Temp.txt");
他の人が指摘したように、このオブジェクトを破棄するか、空のusingステートメントでラップする必要があります。
using (System.IO.File.Create(@"C:\Temp.txt"));
空のファイルを作成するためのやや一般的な使用例は、より高度なプロセス通信がない場合に別のプロセスで何かが発生することです。この場合、(特にトリガーされているものがファイルを削除してトリガーを「消費」する場合)、ファイルの作成を外界の視点からアトミックにするのに役立ちます。
そのため、作成するファイルと同じディレクトリにジャンク名(Guid.NewGuid.ToString())を作成し、一時的な名前から目的の名前にFile.Moveを実行すると役立ちます。そうしないと、ファイルの存在をチェックしてトリガーを削除するトリガーコードが、ファイルが完全にクローズされる前にファイルが削除されるという競合状態になる可能性があります。
一時ファイルを同じディレクトリ(およびファイルシステム)に置くと、必要なアトミック性が得られます。これは次のようなものです。
public void CreateEmptyFile(string path)
{
string tempFilePath = Path.Combine(Path.GetDirectoryName(path),
Guid.NewGuid.ToString());
using (File.Create(tempFilePath)) {}
File.Move(tempFilePath, path);
}
Path.GetTempFileName()は、一意の名前が付けられた空のファイルを作成し、そのファイルへのパスを返します。
パスを制御したいがランダムなファイル名を取得したい場合は、GetRandomFileNameを使用してファイル名文字列を返し、Createで使用できます。
例えば:
string fileName=Path.GetRandomFileName();
File.Create("custom\\path\\" + fileName);