2013-10-08 11 views
1

我有一個問題,其中ftell返回一個不正確的值。我的代碼在Linux上的netbeans上運行時報告正確,但是在windows上使用mingw運行的netbeans中完全相同的代碼報告不正確。文件指針指向在BINARY_READ中打開的文件。在我的linux netbeans中,在運行我的子程序後,ftell報告35.在我的windows netbeans中,在調用相同的子程序之後,這個子程序是3621.我追查了我的子程序,並且下面的語句似乎導致了這個問題:fllll返回不正確的值

後1 ,但在我的Windows的NetBeans這個語句結果
if (((header_size = getc (fp)) == EOF) || (header_size == 0)) 

在我的Linux NetBeans中,該FTELL(FP),這句話後FTELL(FP)是3585.

可能會造成什麼問題呢?

+0

你是否用模式「b」打開文件? –

+0

哦快照..我有不正確的定義爲READ_BINARY和WRITE_BINARY。它們分別是「r」和「w」,而不是「rb」和「wb」。謝謝 –

回答

5

你需要以二進制方式打開文件:

fp = fopen(name, "rb"); 

或相似。你應該習慣於這樣做,因爲只有二進制模式在標準C中有明確的行爲。在POSIX系統中,二進制和文本(默認)模式的行爲相同,但在窗口中,換行符的切換髮生在文件內容和偏移量的混亂方式。

0

請注意,這個問題可能與二進制文件沒有任何關係,這可能是由於即使是64位Windows機器有4字節長,而在Linux 64位系統上長可能是4字節或8字節。

由於ftell返回的時間很長,在windows下最多可以讀取的文件是2GB。而在Linux下,它更高。

windows下的技巧是使用_ftelli64()而不是ftell(),那麼你將有64位訪問。