2011-10-14 16 views
13

FileInfoオブジェクトを新規作成してこれらのメソッドを呼び出すのではなく、Fileオブジェクトの静的メソッドを使用するのには違いがありますか?私は、この意志はあなたを役に立てば幸いFile.Delete()とFileInfo.Delete()との比較

+2

1つは静的で、もう1つはインスタンスを取ります。 :) – leppie

答えて

10

についてテサのリンクを参照してください。解決されたパス。

+0

あなたはパスが相対的であるということを意味していますが、 'File.Delete()'がWin32のDeleteメソッドを呼び出す直前に作業を行う必要があります。 'FileInfo'では、パスは作成時にすでに絶対パスに解決されています。これはあなたが言っていることの正しい解釈ですか?言い換えれば、これは、 'File.Delete()'が同じ相対パスで十分頻繁に呼び出されるため、パフォーマンスに影響を与える可能性があるシーンの背後でCLRが行う作業です。 –

+0

@TimCoker - それは正しいです。既にFileInfoを持っているならば、 'Path.GetFullPathInternal'への呼び出しを保存することができます。これは、パスを正規化/解決するための少しの作業です。 @errorstacksが指摘するように、1つは静的メソッドであり、1つはインスタンスです。したがって、FileInfoのインスタンスなしでFileInfo.Deleteを呼び出すことはできません。あなたがそれを持っていると仮定すると、唯一の違いはパスの解決です。 – CodeNaked

0

いいえ、彼らは利便

0

のために複製されます...

IO.FileInfoインスタンス作成のための方法、コピー、削除、移動、ファイルを開くと、中に補助を提供System.IO.FileStream objectsの作成。このクラスは継承できません。

つまり、このプロセスを実行するには、FileInfoのインスタンス/オブジェクトを作成する必要があります。

IO.Fileは、ファイルの作成、コピー、削除、移動、および開くための静的メソッドを提供し、System.IO.FileStreamオブジェクトの作成を支援します。

つまり、このプロセスを実行するにはFileInfoのインスタンス/オブジェクトを作成する必要はありません。

FileInfoが既に持っている必要がありながら、持っている、(それは相対的であると仮定)より情報の唯一の違いは、Fileが指定されたパスを解決しなければならないということです

http://msdn.microsoft.com/en-us/library/system.io.fileinfo.aspx

http://msdn.microsoft.com/en-us/library/system.io.file.aspx

1

によって異なります。単一の操作を実行する場合はFileクラスを使用し、同じファイルに対して複数の操作を実行する場合はFileInfoを使用します。

EDIT: Fileクラスの静的メソッドが常にセキュリティをチェックすることを私は理解しています。しかし、FileInfoのインスタンスを再利用している場合、メソッドは最初の時にのみセキュリティチェックを行い、それ以降の各呼び出しでは行いません。

+3

投票をしたときには、理由を知っていることを忘れてしまいました。Q/Aサイトでも、学習リソースです...答えが完全にランチになっていくつかの情報が得られます... – Jesse

+0

私はあなたがdownvotedになった理由も不思議です。あなたは興味深い点をそこに作った。 –

+1

私はdownvoteをしなかったが、おそらく私は持っていただろう。あなたはあなたの推薦のために非常に曖昧な根拠を提供しました。それが正しいと感じたら、参考にしてバックアップしてください。 –

4

どちらも、ほとんど差がないWin32Native.DeleteFile()

0

を呼んでいます。どちらも存在する場合はファイルを削除し、存在しない場合は例外をスローします。

+0

それは本当ではない(少なくとも真ではない)FileInfo.Deleteはファイルが存在しない場合は何もしません。http://msdn.microsoft.com/en-us/library/system.io.fileinfo.delete(v = vs.110).aspx – Robba

関連する問題