2011-04-22 67 views
0

我只是想找到的Çprogram..I寫代碼的幫助下,文件大小,但它給錯誤的結果...文件大小

fseek(fp,0,SEEK_END); 
osize=ftell(fp); 

有沒有其他辦法?

+2

你是什麼意思「錯誤的結果」?你得到了什麼,你期望什麼,爲什麼你期望它?另外,你是如何打開文件的? – 2011-04-22 16:07:24

+0

您是否以二進制模式打開文件? – 2011-04-22 16:10:22

+0

@David:我認爲這是一個文本模式/二進制模式問題。 – Mehrdad 2011-04-22 16:10:42

回答

2

系統調用stat是解決此問題的常用方法。或者,在您的具體情況下,fstat

0

嘗試使用_filelength。這不是便攜式的,但是...我不認爲有任何完全便攜的方式來做到這一點。

+0

_filelength不適用於文件指針。但是,你總是可以這樣做:size = _filelength(_fileno(fp)); – 2012-09-20 10:31:25

1

沒有理由不工作。

還有別的辦法嗎? 您可以使用統計,如果你知道文件名:

struct stat st; 
stat(filename, &st); 
size = st.st_size; 

順便說一句ftell返回long int

sys/stat.h頭定義了功能fstat()lstat()返回的數據結構,並stat()

+0

stat的定義或stat的主體包含哪些內容? – Sujoy 2011-04-22 16:21:10

+0

@Sujoy ::查看編輯。順便說一句,你沒有告訴你的文件的大小,只需右鍵單擊它並檢查屬性。 – Sadique 2011-04-22 16:25:33

0

試試這個使用fstat()

int file=0; 
if((file=open(<filename>,O_RDONLY)) < -1) 
    return -1; // some error with open() 

struct stat fileStat; 
if(fstat(file,&fileStat) < 0)  
    return -1; // some error with fstat() 

printf("File Size: %d bytes\n",fileStat.st_size); 
2

FTELL返回一個int。如果你在一個int值爲32位而你的文件大於2GB的系統上,你可能會得到一個負值。 POSIX提供了使用off_t的ftello和fseeko。 C有fgetpos和fsetpos,它們使用fpos_t - 但fpos_t不是一種算術類型 - 例如,它通過語言環境保留與charset處理相關的內容。

0

如果發生錯誤,ftell唯一的負值返回值爲-1L。如果您不介意使用WinAPI,請使用GetFileSizeEx獲取文件大小:

HANDLE hFile = CreateFile(filename, 
          GENERIC_READ, 
          0, 
          NULL, 
          OPEN_EXISTING, 
          FILE_ATTRIBUTE_NORMAL, 
          NULL); 

LARGE_INTEGER size; 
GetFileSizeEx(hFile, &size); 
printf("%ld", size.QuadPart); 

CloseHandle(hFile);