어떻게 (경우 PathTooLongException을 피하기 위해)를 사용할 수 있습니다 : 260 개 문자보다 큰 경로와어떻게 PathTooLongException을 피하면서 FileInfo 클래스를 사용할 수 있습니까?
System.IO.FileInfo
?
FileInfo 클래스와 동일한 결과를 반환하는 유사한 클래스/메서드가 있습니까?
어떻게 (경우 PathTooLongException을 피하기 위해)를 사용할 수 있습니다 : 260 개 문자보다 큰 경로와어떻게 PathTooLongException을 피하면서 FileInfo 클래스를 사용할 수 있습니까?
System.IO.FileInfo
?
FileInfo 클래스와 동일한 결과를 반환하는 유사한 클래스/메서드가 있습니까?
쉽게 알 수있는 것은 아닙니다. 피닉스 (Phoenix)가 언급했듯이 스트림에 대한 해결 방법을 사용할 수는 있지만 파일 이름을 처리 할 수는 없습니다. 파일 이름과 함께 작동하는 모든 클래스는 내부적으로 긴 파일 이름 검사를 수행합니다.
리플렉션을 사용하여 FileInfo를 인스턴스화하고 비공개 멤버를 채울 수 있지만 (권장하지 않음) 긴 경로를 가진 파일을 가리키는 FileInfo를 가져옵니다. 그러나이 객체를 사용하려고하면 PathTooLongException 예외가 계속 발생합니다. 예를 들어 Path 클래스 (FileInfo에서 많이 사용)는 모든 메소드 호출에서 긴 경로를 확인하기 때문입니다.
따라서 문제없는 긴 경로 지원을 얻는 올바른 방법은 하나뿐입니다. FileInfo 동작을 모방 한 클래스 세트를 구현하십시오. 그것은 매우 복잡하지는 않지만 (단지 보안 일 수도 있음), 시간 소모적입니다.
업데이트 : 여기에 심지어이 준비 솔루션이 문제에 대한 : AlpfaFS과 여기에 직장에서
우리는 매우 자주 긴 경로를 처리, 우리는 따라서 기본적으로 그것을 할 우리 자신의 System.IO를 출시했다 Zeta Long Paths . 글쎄,하지만 우리는 File, Directory, FileInfo, DirectoryInfo 및 Path를 약간만 재 작성했습니다. 기본 전제는 Win32 API 관점에서 가능하다는 것입니다. 따라서 하루가 끝나면 실제로해야 할 일은 유니 코드 버전의 Win32 API 함수를 호출하는 것입니다. 그렇다면 여러분은 훌륭합니다. 그것은 일의 alot이고, 엉덩이에 때때로 고통 일 수있다, 그러나 진짜로 그것을하는 더 나은 방법이 없다.
새로운 클래스가 어떻게 보이나요, 그것들은 100 % 손으로 작성되었거나 File 클래스에서 내장 된 File 클래스를 서브 클래스 화합니까? –
글쎄, 파일은 실제로 정적 클래스이므로 상속받을 수는 없지만 하위 클래스 화 (FileInfo, DirectoryInfo) 클래스의 대부분은 봉인되어 서브 클래 싱 할 수 없습니다. 우리는 그들을 처음부터 모두 썼습니다. 나는 거짓말하지 않을 것이다, 우리는 반사체를 사용했다. :) – BFree
Doh, yeah, static :) 꽤 멋지고 훌륭한 대답. –
가,이 Delimon.Win32.IO Library (V4.0) 을 불리는 긴 파일 이름 문제를 극복하기위한 마이크로 소프트 TechNet의 큰 라이브러리 그리고 그것은 예를 들어, 당신은 대체 할 System.IO
에서 주요 방법 중 자신의 버전이 있습니다 :
Delimon.Win32.IO.Directory.GetFiles
와
System.IO.Directory.GetFiles
당신이 시간을 할 것이다 andle 긴 파일 및 폴더. 웹 사이트에서
:
Delimon.Win32.IO 최대 32,767 자까지 & 폴더 이름을 파일 System.IO 및 지원의 기본 파일 기능을 대체합니다.
이 라이브러리는 .NET 프레임 워크 4.0에 기록되고 86 & x64 시스템에 하나 사용할 수 있습니다. 표준 System.IO 네임 스페이스의 파일 & 폴더 제한 (MAX_PATH는 일반적으로 260 개 문자로 구성 입니다) 폴더 이름에 파일 이름에 260 자 240 자까지 파일로 작업 할 수 있습니다.일반적으로 System.IO.PathTooLongException 표준 .NET 라이브러리에 오류가 발생합니다.
FullName 속성 만 사용해야했지만 PathTooLongException도 수신했습니다. FullPath는 값을 추출하는 반사를 사용
내 문제 해결에 충분했다 :
private static string GetFullPath(FileInfo src)
{
return (string)src.GetType()
.GetField("FullPath", BindingFlags.Instance|BindingFlags.NonPublic)
.GetValue(src);
}
1을; Zeta Long Path 링크를 통해 내가 필요한 것을 정확히 얻을 수있었습니다. 'FindFirstFile' API 호출은'FileInfo'를 복제하는 핵심 요소입니다. –
AlphaFS가 나에게 트릭을 보냈습니다. 덕분에 – bjoern