web-dev-qa-db-ja.com

FileStream Create

この構文ですか

 FileStream fs = new FileStream(strFilePath, FileMode.Create);

これと同じ?

FileStream fs = File.Create(strFilePath);

はいの場合、どちらが良いですか?

9
user609511

JustDecompileによると、File.Createは最終的に次のように呼び出すため、これは重要です。

new FileStream(path, 
               FileMode.Create, 
               FileAccess.ReadWrite, 
               FileShare.None, 
               bufferSize, 
               options);

bufferSizeが4096(デフォルト)でFileOptions.None(FileStreamコンストラクターと同じ)ですが、FileShareフラグが異なります。FileStreamコンストラクターはFileShare.Readでストリームを作成します。

つまり、読みやすくするために、他のオプションを気にしない場合はFile.Create(string)を使用してください。

12
CodeCaster

私の意見では、私はこれを使用します:

using (FileStream fs = new FileStream(strFilePath, FileMode.Create))
{    
    fs.Write("anything");
    fs.Flush();
}

基本的に同じことをしますが、これはファイルを作成して作成/書き込みモードで開き、バッファサイズとすべてのパラメータを設定できます。

new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize, options);

File.Createを使用すると、これらすべてのデフォルトのバッファーとパラメーターがラップされます。新しいFileStream(strFilePath、FileMode.Create);を使用すると、柔軟性と管理が大幅に向上します。ただし、読みやすさや管理オプションを増やしたい場合は、現時点では個人的な選択になります。

7
TrizZz

2つ目は、ストリームに異なるFileModeを使用します。この記事をご覧ください

http://msdn.Microsoft.com/en-us/library/47ek66wy.aspx

このメソッドのデフォルト値を管理するには!

ただし、usingステートメントを使用すると、すべてのリソースが正しい方法で解放されます。

using (FileStream fs = new FileStream(strFilePath, FileMode.Create))
{
    // HERE WHAT YOU WANT TO DO!
}
2
MAXE

彼らはまったく同じことをします。唯一の本当の違いは、前者は必要に応じて実行時に異なるFileModeを使用できるようにし(変数で制御する)、後者はCreate操作のみを実行することです。

ちなみに、慣例として、usingブロック内のファイルストリームなどを処理して、スコープ外の場合は自動的に破棄します。

using (var fs = new FileStream(strFilePath, FileMode.Create))
{
    //do some stuff
}
1
PhonicUK

最初のものでは、ハンドル、ファイルアクセス、ファイルモード、intバッファサイズなどのように実行するオプションが多くなりますが、2番目のものでは実行するオプションが少なくなります。

1つ目は、読み取りアクセスを共有してファイルを作成または上書きし、2つ目はNoneを使用します。したがって、ファイルの処理中にアクセスを許可するかどうかによって異なります。

0
Reniuz