C #에서 File과 FileInfo의 차이점은 무엇입니까?
나는 파일 클래스 의 정적 메서드가 파일 이 존재하는지 확인하는 것과 같은 파일에 대해 작고 적은 작업을 수행하는 데 더 잘 사용되며 많은 작업을 수행 할 경우 FileInfo 클래스 의 인스턴스를 사용해야한다는 것을 읽었 습니다. 특정 파일에 대한 작업.
나는 이것을 이해하고 단순히 그렇게 맹목적으로 사용할 수 있지만 왜 차이점이 있는지 알고 싶습니다. 서로 다른 상황에 적합한 작업 방식은 무엇입니까? 다른 방식으로 똑같이 보이는이 두 개의 다른 클래스를 갖는 이유는 무엇입니까?
누군가가이 질문 중 하나 이상에 답할 수 있다면 도움이 될 것입니다.
일반적으로 파일에 대해 단일 작업을 수행하는 경우 File
클래스를 사용합니다 . 동일한 파일에 대해 여러 작업을 수행하는 경우 FileInfo
.
이렇게하는 이유는 파일에 액세스 할 때 수행되는 보안 검사 때문입니다. 의 인스턴스를 만들 때 FileInfo
확인은 한 번만 수행됩니다. 그러나 정적 File
메서드 를 사용할 때마다 검사가 수행됩니다.
"File 및 FileInfo 클래스의 메서드는 비슷하지만 File 클래스의 메서드가 정적 이라는 점에서 다릅니다 . 따라서 FileInfo 인스턴스의 메서드보다 더 많은 매개 변수를 전달해야합니다. 예를 들어 FileInfo.CopyTo () 메서드는 파일을 복사하는 데 사용되는 대상 경로에 대해 하나의 매개 변수를 사용하는 반면 File.Copy () 메서드는 원본 경로와 대상 경로에 대해 두 개의 매개 변수를 사용합니다. . "
http://www.aspfree.com/c/a/C-Sharp/A-Look-at-C-Sharp-File-and-FileInfo-Classes/1/
http://www.intelliott.com/blog/PermaLink,guid,ce9edbdb-6484-47cd-a5d6-63335adae02b.aspx
File.Exists는 새 FileInfo (filePath) .Exists보다 훨씬 빠르게 수행됩니다. 특히 네트워크를 통해 파일이 실제로 존재하는 경우 더욱 그렇습니다. 이는 File.Exists는 파일의 존재 여부 만 확인하는 반면 new FileInfo (filePath) .Exists는 먼저 파일의 모든 속성 (날짜, 크기 등) (존재하는 경우)을 포함하는 FileInfo 개체를 생성하기 때문입니다.
내 경험상, File.Exists를 사용하면 네트워크를 통해 10 개의 파일이 있는지 확인하는 것조차 눈에 띄게 더 빠릅니다 (즉, 20ms 대 200ms).
파일은 파일에 대한 일회성 작업에 최적화되어 있고 FileInfo는 동일한 파일에 대한 여러 작업에 최적화되어 있지만 일반적으로 다른 메서드 구현 간에는 그다지 차이가 없습니다.
정확한 구현을 비교하려면 Reflector를 사용하여 두 클래스를 모두 살펴보십시오.
액세스 제어 속성을 처리하려면 FileInfo가 필요할 수 있습니다. 나머지는 정적 대 인스턴스 선택이며 편리한 것을 선택할 수 있습니다.
예, 그 이유 중 하나는 Nag가 말한 것처럼 Files는 유틸리티 클래스이므로 인스턴스를 만들 필요가 없기 때문일 수 있습니다. 동시에 파일이 유틸리티 클래스이므로 매번 보안 검사가 필요합니다.
반면에 FileInfo는 인스턴스를 생성해야하며 그 시점에서 보안 검사를 사용합니다. 따라서 이제 FileInfo를 사용하여 여러 작업을 수행하면 보안 검사가 호출되지 않습니다.
FileInfo는 파일의 인스턴스이므로 파일 자체를 나타냅니다. 파일은 유틸리티 클래스이므로 모든 파일에서 작업 할 수 있습니다.
최근에에서 문제가 발생 File.Exist
하여이 기능이 싫습니다. Fileinfo
클래스 Exist
함수를 사용한 후에 내 프로그램이 올바르게 작동합니다.
실제로 개발 환경에서 일어나는 File.Exist
일은 잘 작동하지만 라이브 환경으로 갈 때이 기능은 오류 액세스가 거부되고 파일을 사용할 수 없기 때문에 파일 객체를 차단합니다.
이것은 나의 배움입니다. 내가 사용하지 않습니다 File.Exist
개체를 만든 다음 그것을 사용하는 가장 좋은 방법입니다. 정적 메서드를 사용해야합니다.
FileInfo :
- 사용하기 전에 인스턴스화해야 함
- 인스턴스 메서드를 포함합니다.
- 파일에 대한 정보를 캐시하고 파일에 대한 최신 정보를 얻으려면 매번 새로 고침을 호출해야합니다.
파일:
- 인스턴스화 할 필요 없음
- 정적 메서드를 포함합니다.
- 캐시하지 않기 때문에 사용할 때마다 최신 정보를 얻을 수 있습니다.
src :
참고 URL : https://stackoverflow.com/questions/1324788/what-is-the-difference-between-file-and-fileinfo-in-c
'code' 카테고리의 다른 글
Node.js 스크립트에 대한 적절한 해시 뱅 (0) | 2020.11.15 |
---|---|
C의 포인터에서 배열의 크기를 어떻게 얻을 수 있습니까? (0) | 2020.11.15 |
MSBuild 파일에 대한 표준 파일 확장자가 있습니까? (0) | 2020.11.15 |
Rabbitmq 또는 Gearman-작업 대기열 선택 (0) | 2020.11.15 |
Python의 명령 줄에서 구성 옵션을 재정의하는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.15 |