나는 다음과 같은 방법을 사용하여 파일의 크기를 얻으려고에 포인터를 탐색 설정 : 문제의 파일이 2GiB 이상 조금파일 크기를 얻기과 윈도우
size_t fsize = 0;
fseek(fin, 0L, SEEK_END);
fsize = ftell(fin);
fseek(fin, 0L, SEEK_SET);
입니다, 그리고 ftell은 일부를 반환 거대한 숫자.
또한 내 응용 프로그램에서는 모든 읽을 때마다 바이트 수를 다시 설정해야합니다. 나는 다음을 사용했다. i
내가 마지막 FREAD 후 파일의 끝에 도달하는 경우 일반적으로 발생해야하는 16와 동일한 경우
i = fread(inbuf, 1,readSize, fin);
fseek(fin, -16, SEEK_CUR);
모든 읽기 후에, 나는 확인한다. 그러나이 역시 작동하지 않고 0의 값은
i
에 할당되어 탐색 포인터가 뒤로 이동하지 않았 음을 나타냅니다.
필자의 프로그램은 Linux에서 잘 작동하며 다른 읽기 및 파일 크기로 테스트되었습니다. 코드는 Linux 버전의 코드와 거의 동일합니다. 차이점은 Windows에서 C99의 stdint
라이브러리를 사용할 수 없다는 점입니다. 그 외에는 코드가 완전히 동일합니다. Linux 버전은 똑같은 테스트 파일과 읽기 크기를 사용하여 잘 작동합니다.
마지막으로, Win20에서 VS2010을 사용하는 CUDA 프로그램 (런타임 버전 4.2)을 언급해야합니다. 이것은 64 비트 프로그램입니다.
편집
이 파일은 'B'플래그와 함께 문을 열었습니다. 코드는 다음과 같습니다.
if(!(fin = fopen(argv[1], "rb")))
{
printf("The input file: %s could not be opened\n", argv[1]);
err = -5; goto exit;
}
if(!(fout = fopen(argv[2], "wb")))
{
printf("The output file: %s could not be opened\n", argv[1]);
err = -6; goto exit;
}
그럴 수도 있지만 표준 파일 포인터 대신 파일 핸들을 사용해야합니다. 하나를 다른 것으로부터 얻을 수있는 방법이 있습니까? – sj755
'FILE * '로부터 파일 기술자를 얻기 위해서'fileno' 함수를 사용하십시오. – librik
http://msdn.microsoft.com/en-us/library/zs6wbdhx(v=vs.80).aspx : 작동해야합니다. stat() 시스템 호출이나 fstat()에 대해 좀 더 자세히 설명합니다 :이 함수를 사용한다면 불필요한 디스크 접근을 피할 수 있습니다. 파일 크기는 보유하고있는 파일에 관한 메타 데이터 중 하나 일뿐입니다 메모리에. – Arvind