2010-05-05 71 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