2012-10-12 6 views
0

현재 간단한 간단한 일회용 패드 프로그램을 작성 중입니다. keyfilesource 파일보다 작을 때 사용자에게 경고하고 싶지만 실행하면 내 프로그램이이를 무시합니다. C 프로그램이 if 문의 문을 무시하고 있습니다.

/* Check if keyfile is the same size as, or bigger than the sourcefile */ 
if(sizeof keyfile < sizeof sourcefile) 
{ 
printf("Source file is larger than keyfile.\n"); 
printf("This significantly reduces cryptographic strength.\n"); 
printf("Do you wish to continue? (Y/N)\n"); 
scanf("%c", &ans); 
if(ans == 'n' || ans == 'N') 
    { 
    return (1); 
    } 
if(ans == 'y' || ans == 'Y') 
    { 
    printf("Proceeding with Encryption/Decryption.\n"); 
    } 

나는 문제가 내 사용 sizeof에게 있습니다 의심하지만 난 다른 옵션에 대해 몰라? 작동하도록 코드를 어떻게 바꿀 수 있습니까?

편집 :

/* Get size of sourcefile. */ 
if((sourcefile = fopen(argv[1], "rb"))== NULL) 
{ 
printf("Can't open source file.\n"); 
printf("Please enter a valid filename.\n"); 
printf("USAGE: OTP <source file> <output file> <keyfile>\n"); 
return (1); 
} 

fflush(sourcefile); 
fstat(fileno(sourcefile), &statbuf); 
fclose(sourcefile); 

/* Get size of keyfile. */ 
if((keyfile = fopen(argv[3], "rb"))== NULL) 
{ 
printf("Can't open keyfile.\n"); 
printf("Please enter a valid filename.\n"); 
printf("USAGE: OTP <source file> <output file> <keyfile>\n"); 
return(1); 

fflush(keyfile); 
fstat(fileno(keyfile), &keybuf); 
fclose(keyfile); 
} 

과의 첫 번째 줄 경우를 변경 : 내 능력의 최선을 fstat를 추가하는 시도,하지만 여전히 같은 방식으로 반응 ... 여기에 내가 무슨 짓을 문이 무시 됨 :

if((keybuf.st_size) < (statbuf.st_size)) 

왜 프로그램에서 여전히 무시되고 있습니까?

시간을내어 답변 해 주신 분들께 감사드립니다.

+1

http://stackoverflow.com/questions/238603/how-can-i-get-a-files-size-in-c – Paulpro

+0

컴파일 타임에 결정이 내려지기 때문에 변수' keyfile'과'sourcefile'은 아마 문제가되지 않을 것입니다, 그러나 완전을 위해, 당신은 그렇게해야합니다. –

+1

사람들이 그것을보고 싶어하고 가독성을 위해 다른 질문을 만드는 것을 고려하십시오. – tomahh

답변

10

sizeof 는 파일의 크기를 반환하지 않습니다. sizeof은 유형이 메모리에서 차지하는 바이트 수를 확인하는 데 사용됩니다.

파일 크기를 가져 오는 방법에 대한 자세한 내용은 this을 참조하십시오.

5

sizeof은 피연산자의 데이터 형식 크기를 바이트 단위로 계산하는 컴파일 타임 연산자입니다. 그게 네가 여기에서하고 싶은 것이 확실한가? 나는 그것이 매우 의심 스럽습니다. 을 파일 크기과 비교하려고합니다. (끝 fopen(), fseek(), ftell()는 파일의 크기, 또는 무엇이든 더 편안 기능 당신의 OS 'API가를 제공을 얻을 수 있습니다.)

4

sizeof은 데이터 유형의 크기를 계산하는 데 사용되는 단항 연산자입니다. 이 파일을 사용하여 텍스트 파일의 크기를 비교/비교할 수는 없습니다.

3

파일의 크기를 얻으려면 stat을 사용해야합니다.

+0

아니요, 그는'GetFileSizeEx()'를 사용해야합니다 ... – DevSolar

+0

파일 크기를 얻는 방법은 물론 플랫폼에 달려 있습니다 ... 그래서 C 표준에 포함되지 않습니다. POSIX-ish 시스템의 경우'stat'가 정확합니다. 다른 플랫폼의 경우 플랫폼에 따라 대답이 다릅니다. –

+2

@DevSolar - Windows 인 경우 True입니다. 그러나 Windows는 POSIX를 지원하며 stat는 POSIX입니다. UNIX (몇 가지 다른 운영 체제는 물론)에도 쉽게 이식 할 수 있습니다. –