2010-07-20 2 views
3

두 문자열의 크기를 비교할 앱을 작성하고 있습니다. 크기별로 디스크에 직접 저장 한 경우 차지하는 디스크 공간을 의미합니다.디스크 공간을 계산하면 문자열을 디스크에 저장하지 않고 사용합니다.

에 저장하지 않고 (디스크에 저장하는 것이 더 효율적인 경우가 아니라면) 문자열의 크기를 C#으로 계산할 수 있습니까?

+1

크기 당신이 가장 가까운 섹터 또는 클러스터 또는 어떤까지 반올림해야합니까? –

답변

8

그래, 그것은 쉽게 :이 encode 된 형식의 바이트 수입니다

Encoding encoding = Encoding.UTF8; // Or whatever 
int size = encoding.GetByteCount(text); 

하는 것으로. 파일 시스템이 압축 등을 수행하는 경우 실제 크기를 예측하는 것이 훨씬 어려워집니다.

do은 인코딩을 선택해야합니다. "직접"디스크에 저장하는 것과 같은 것은 없습니다. 이진 표현을 선택해야합니다.

+1

디스크 공간면에서 클러스터 크기의 배수가 될 것입니다. –

+0

@Chris : 파일 자체에 있다고 가정하면 ... 그렇지 않을 수도 있습니다. –

+0

제 생각에 그것이 저의 요점이라고 생각합니다. 문자열이 파일의 기존 데이터에 추가 된 경우에도 문자열의 마지막 바이트가 다음 클러스터를 할당하게되면 전체 클러스터의 디스크 크기 비용이 발생합니다. –

2

디스크 크기와 파일 시스템에 따라 데이터가 클러스터로 기록되는 데이터를 디스크에 저장하면 클러스터 크기가 달라집니다.

크기가 16TB 미만인 NTFS 디스크의 경우 클러스터 크기는 4K입니다. 즉, 1 바이트 문자열은 4K 디스크 공간을 사용하고 5000 바이트 문자열은 8K 디스크 공간을 사용합니다. 여기

다양한 MS의 filesytems 및 기본 클러스터와 링크가 http://support.microsoft.com/kb/140365

관련 문제