zip 파일인지 확인하기 위해 파일을 테스트하는 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1887041

문제

새 파일 형식 사양으로보고 있으며 사양에 따라 파일은 XML 기반이거나 XML 파일 및 기타 파일이 포함 된 ZIP 파일 일 수 있습니다.

파일 확장자는 두 경우 모두 동일합니다. 파일을 테스트하여 압축 압축이 필요한지 또는 독서가 필요한지 결정할 수있는 방법은 무엇입니까?

도움이 되었습니까?

해결책

zip 파일 형식은 pkware에 의해 정의됩니다. 파일 사양을 찾을 수 있습니다 여기.

상단 근처에는 헤더 사양이 있습니다.

A. 로컬 파일 헤더 :

    local file header signature     4 bytes  (0x04034b50)
    version needed to extract       2 bytes
    general purpose bit flag        2 bytes
    compression method              2 bytes
    last mod file time              2 bytes
    last mod file date              2 bytes
    crc-32                          4 bytes
    compressed size                 4 bytes
    uncompressed size               4 bytes
    file name length                2 bytes
    extra field length              2 bytes

    file name (variable size)
    extra field (variable size)

이것으로부터 헤더의 첫 4 바이트는 16 진수 값 0x04034B50이어야하는 파일 서명이어야한다는 것을 알 수 있습니다. 파일의 바이트 순서는 다른 방식입니다. PKWare는 "모든 값이 달리 지정되지 않는 한 작은 값 바이트 순서로 저장됩니다." 처음 4 바이트.

파일이 zip 파일인지 확인하기 위해이를 사용하여 확인할 수 있습니다. 메모장에서 파일을 열면 처음 두 바이트 (50 및 4b)가 ASCII 문자 PK임을 알 수 있습니다.

다른 팁

당신은 볼 수 있습니다 마법 번호 파일의. Zip Archives 용은 다음에 나열되어 있습니다 지퍼 형식 위키 백과 페이지: PK\003\004 or PK\005\006.

파일의 처음 몇 바이트를 확인하십시오. 마법 번호. 지퍼 파일은 PK (50 4B)로 시작합니다. XML 파일은 이러한 문자로 시작할 수없고 여전히 유효하기 때문에 파일 유형에 대해서는 상당히 확신 할 수 있습니다.

당신이 사용할 수있는 파일 텍스트 파일 (XML) 또는 실행 파일 (ZIP)인지 확인하십시오. 아래로 스크롤하여 예를보십시오.

그래도 좋은 해결책은 아니지만 부하를 생각하는 것만 ... 어떻습니까?

try
{
LoadXmlFile(theFile);//Exception if not an xml file
}
catch(Exception ex)
{
LoadZipFile(theFile)
}

파일을 확인하여 유효한 XML 헤더가 포함되어 있는지 확인할 수 있습니다. 그렇지 않으면 압축을 해보십시오.

보다 XML 사양을 보려면 여기를 클릭하십시오.

매직 번호를 파일

명확히하기 위해, 그것은 50 4B 03 04로 시작합니다.

보다 http://www.pkware.com/documents/casestudies/appnote.txt (Simon P Stevens에서)

XML 파일은 유효한 zip 파일이 될 가능성이 높거나 다른 사람들이 말했듯이 마법의 숫자를 확인할 수는 없을 것입니다.

사용중인 내용에 따라 다르지만 Zip 라이브러리에는 파일을 테스트하는 기능이있을 수 있습니다. IS_ZIP, TEST_FILE_ZIP 등의 ZIP 파일입니다.

또는 위에 주어진 마법 번호를 사용하여 자신의 기능을 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top