2014-11-12 2 views
0

Byte() 배열로 문서를 반환하는 API로 작업하고 있습니다. 내 첫 번째 질문은 Byte() 배열의 용량은 무엇입니까? 나는 전체 문서가 API에서 나오는지 확인해야한다.파일에 큰 바이트() 배열 저장

Byte() 배열이 전체 문서를 메모리에 보관한다고 가정 할 때 로컬 폴더에 저장하는 가장 효율적인 메커니즘은 무엇입니까?

File.WriteAllBytes를 살펴 봤지만 2MB로 제한되어있는 것 같습니다. 현재 사용 중입니다.

Dim bDocument = obj.DownloadDocument(21, oAuth) 'API call returns byte() of document 
    Dim sStream As New FileStream("C:\Websites\docName.tif", FileMode.Create, FileAccess.ReadWrite) 
    sStream.Write(bDocument, 0, bDocument.Length) 

그러나 2GB는 CLR의 파일 크기 제한입니다. 잠재적 인 매우 큰 파일을 처리하고 저장하는 가장 좋은 방법은 무엇입니까?

답변

1

여기 질문입니다 :

  1. 요소의 최대 수 있습니다 .NET에서 배열 2.147.483.647 (2^31-1)입니다. 최대 크기 인은 요소 유형 및 32 비트 프로세스에서 실행 중인지 64 비트 프로세스에서 실행 중인지에 따라 다릅니다. 따라서 바이트 배열의 최대 크기는 위의 수 (2GB - 1 바이트)입니다.
  2. 로컬 폴더에 저장하려면 단일 배열에서 File.WriteAllBytes을 사용하십시오. 배열이 여러 개인 경우 스트림을 사용하고 각 배열을 작성하십시오.
  3. File.WriteAllBytes는 2의 제한이 없습니다 입니다. 혼자서는 아무런 제한이 없지만 분명히 2GB (-1 바이트)보다 큰 바이트 배열을 쓸 수 없습니다. 이러한 배열은 .NET에서 허용되지 않기 때문에
  4. 최대 파일 크기는 기본 파일 시스템에 의해 결정됩니다. .NET/CLR.

사이드 질문 : "디스크에 직접"파일을 다운로드한다고 생각하십니까? 다운로드를위한 스트림과 파일 스트림을 열고 버퍼로 버퍼를 읽고 파일 스트림에 쓰는 것을 의미합니까? 이것은 실제 크기 제한이 메모리가 아닌 기본 파일 시스템 또는 여유 공간이라는 것을 의미합니다. 분명히 이것은 API가 스트림을 지원하는 곳에서 다운로드하는 경우에만 가능합니다.

+0

불행히도이 문서는 byte() 배열로 문서를 반환하는 제 3 자 시스템 및 해당 API입니다. 그래서 우리가 여기서 바라보고있는 것은 2GB 이하의 문서에만 API가 적합하다는 것입니다. 필자는 소프트웨어 공급 업체로 가서 문서를 스트리밍 할 수 있는지 여부를 확인하는 것이 좋습니다. – Rathean

+0

API는 2GB보다 큰 문서를 반환 할 수 없으며 어쨌든 문제가 아닙니다. 처음부터 큰 문서를받을 수 있습니까? 어떤 종류의 문서입니까? 좀 더이 보면 –

+0

는 닷넷 4.5으로 설정 옵션이 있습니다 : 2GB의 제한을 제거 . 따라서 솔루션은 최신 프레임 워크 버전으로 업그레이드하는 것으로 보입니다. – Rathean