如何使用c检查文件是否包含内容?

时间:2012-11-26 13:42:55

标签: c file file-io lcc-win32

我有一个源文件file1和一个目标文件file2,在这里我必须将内容从file1移到file2

所以我必须先做一些验证。

  1. 我必须检查源文件是否存在? 我可以用这个来检查:

    fp = fopen( argv[1],"r" );
    if ( fp == NULL )
    {
        printf( "Could not open sourse file\n" );
        exit(1);
    } 
    
  2. 然后我要检查源文件是否有内容?如果有空,则必须抛出一些错误消息。

  3. 这是我到目前为止所尝试过的。

8 个答案:

答案 0 :(得分:8)

C版:

if (NULL != fp) {
    fseek (fp, 0, SEEK_END);
    size = ftell(fp);

    if (0 == size) {
        printf("file is empty\n");
    }
}

C ++版本(从here被盗):

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

答案 1 :(得分:3)

您可以使用stat方法在不使用打开文件的情况下执行此操作

#include <sys/stat.h>
#include <errno.h>

int main(int argc, char *argv[])
{

     struct stat stat_record;
     if(stat(argv[1], &stat_record))
         printf("%s", strerror(errno));
     else if(stat_record.st_size <= 1)
         printf("File is empty\n");
     else {
         // File is present and has data so do stuff...
     }

因此,如果该文件不存在,您将点击第一个if并收到如下消息:"No such file or directory"

如果文件存在且为空,您将收到第二条消息"File is empty"

此功能在Linux和Windows上都存在,但在Win上是_stat。我还没有测试过windows代码,但你可以看到它的例子here

答案 2 :(得分:1)

您可以使用SEEK_END使用{{1}}然后使用fseek来获取文件大小(以字节为单位)。

答案 3 :(得分:1)

fseek(fp, 0, SEEK_END); // goto end of file
if (ftell(fp) == 0)
 {
      //file empty
 }
fseek(fp, 0, SEEK_SET); // goto begin of file
// etc;

reference for ftell and example

reference for fseek and example

答案 4 :(得分:1)

看看是否有要阅读的角色

int c = fgetc(fp);
if (c == EOF) {
    /* file empty, error handling */
} else {
    ungetc(c, fp);
}

答案 5 :(得分:0)

您可以检查文件大小&gt; 0

在您的检查文件代码存在之后(在关闭文件之前),您添加以下代码

   size = 0
    if(fp!=NULL)
    {
        fseek (fp, 0, SEEK_END);

        size = ftell (fp);
        rewind(fp);

    }
    if (size==0)
    {
      // print your error message here
     }

答案 6 :(得分:0)

打开数据并计算文件的每个字节是很痛苦的。最好要求操作系统提供有关您要使用的文件的详细信息。如前所述,API依赖于您的操作系统。

答案 7 :(得分:0)

您可以使用feof()功能。 例如:

if(feof(file))
{
    printf("empty file\n");
}