2010-05-05 48 views
0

以下是我的代碼。我的問題是,我的目標文件總是比原始文件有更多的字符串。然後,在for循環中,而不是使用i < sizeof more,我意識到我應該使用i < sizeof file2。現在我的問題是,如何獲得file2的大小?如何在visual C++中獲取文件的大小?

int i = 0; 

FILE *file2 = fopen(LOG_FILE_NAME,"r"); 
wfstream file3 (myfile, ios_base::out); 


// char more[1024]; 
char more[SIZE-OF-file2]; 


for(i = 0; i < SIZE-OF-file2 ; i++) 
{  
    fgets(more, SIZE-OF-file2, file2); 
    file3 << more; 
} 

fclose(file2); 
file3.close(); 

回答

1

您可以使用GetFileSize()來做到這一點。通過從文件系統中讀取文件的大小,您將避免大量不必要的計算。這也可以用_stat()來完成,或者在unix上它只是stat()。

下面是定義:

DWORD WINAPI GetFileSize( __in HANDLE HFILE, __out_opt LPDWORD lpFileSizeHigh );

文件爲GetFileSize:

http://msdn.microsoft.com/en-us/library/aa364955%28VS.85%29.aspx

或者你可能想_stat()

文件用於統計用途: http://msdn.microsoft.com/en-us/library/14h5k7ff%28VS.80%29.aspx

2

最基本的方法是fseek到底的文件,並使用ftell來給你抵消。其他(統計)功能也是這樣做的,但它們不是跨平臺的。當然,如果你想讓你的代碼腐爛,你也可以使用GetFileSize()

fseek(file, 0, SEEK_END); 
off_t offset = ftell(file); 
fseek(file, 0, SEEK_SET); 

你指到C的Visual C或C++作爲的Visual C每次++我死了一點。

+1

OP並沒有將C稱爲Visual C,C++或Visual C++。他/她實際上是在談論Visual C++,如果你讀到這個問題的話。我非常喜歡C89/C99,就像下一個人一樣,並且通常會討厭Windows。雖然解決「Visual C++」問題的最有效方法是使用它們提供的API。至於「地獄裏的代碼腐爛」,請嘗試使用預處理器。這就是它存在的原因。 – 2010-05-05 01:13:52

+0

...基本上C與微軟具體擴展... – aviraldg 2010-05-05 01:15:41

+0

...什麼預處理器? :) – 2010-05-05 01:19:33