在C ++中检查一个空文件

有一个简单的方法来检查一个文件是否为空。 就像如果你传递一个文件到一个函数,你意识到它是空的,那么你马上closures它? 谢谢。

编辑,我尝试使用fseek方法,但我得到一个错误,说'不能转换ifstream到FILE *'。

我的函数的参数是

myFunction(ifstream &inFile) 

也许类似于:

 bool is_empty(std::ifstream& pFile) { return pFile.peek() == std::ifstream::traits_type::eof(); } 

简短而甜蜜。


考虑到你的错误,其他答案使用C风格的文件访问,在那里你得到一个具有特定function的FILE*

相反,你和我正在使用C ++stream,因此不能使用这些function。 上面的代码以一种简单的方式工作: peek()将偷看stream,并返回,而不删除,下一个字符。 如果到达文件末尾,则返回eof() 。 Ergo,我们只是peek()在这个stream,看看它是不是eof() ,因为一个空的文件没有什么可偷看的。

请注意,如果文件从不打开,这也会返回true,这应该适用于您的情况。 如果你不想这样做:

 std::ifstream file("filename"); if (!file) { // file is not open } if (is_empty(file)) { // file is empty } // file is open and not empty 

好的,这段代码应该适合你。 我改变了名字来匹配你的参数。

 inFile.seekg(0, ios::end); if (inFile.tellg() == 0) { // ...do something with empty file... } 

寻find文件的结尾并检查位置:

  fseek(fileDescriptor, 0, SEEK_END); if (ftell(fileDescriptor) == 0) { // file is empty... } else { // file is not empty, go back to the beginning: fseek(fileDescriptor, 0, SEEK_SET); } 

如果您没有打开文件,只需使用fstat函数并直接检查文件大小。

 char ch; FILE *f = fopen("file.txt", "r"); if(fscanf(f,"%c",&ch)==EOF) { printf("File is Empty"); } fclose(f); 
 pFile = fopen("file", "r"); fseek (pFile, 0, SEEK_END); size=ftell (pFile); if (size) { fseek(pFile, 0, SEEK_SET); do something... } fclose(pFile) 

怎么样(虽然不优雅的方式)

 int main( int argc, char* argv[] ) { std::ifstream file; file.open("example.txt"); bool isEmpty(true); std::string line; while( file >> line ) isEmpty = false; std::cout << isEmpty << std::endl; } 
 if (nfile.eof()) // Prompt data from the Priming read: nfile >> CODE >> QTY >> PRICE; else { /*used to check that the file is not empty*/ ofile << "empty file!!" << endl; return 1; }