3 个 C 程序示例,用于创建包含数据的文件

本教程介绍如何使用 C 程序创建文件。

在这些示例中,我们将创建新的 HTML 文件并向其中写入一些内容。

文件的内容会有所不同,但这三个 C 示例程序应该向大家说明如何使用 fopenfprintf 等 c 文件函数来创建和操作文件。

示例一

这是第一个示例,它创建了一个名为 index.html 的新文件,其中包含一些 HTML 内容。

使用以下示例代码创建 f1.c。

f1.c

#include <stdio.h> 
#include <stdlib.h> 

int main( void ) 
{ 
  FILE      *ptrFile = fopen( "index.html", "w"); 
  int        i; 

  fprintf( ptrFile, "<HTML>\n "); 
  fprintf( ptrFile, "<HEAD> <TITLE> The Geek Stuff </TITLE> </HEAD>\n" ); 
  fprintf( ptrFile, "<BODY BGCOLOR=\"#110022\" TEXT=\"#FFBBAA\"> \n"); 
  fprintf( ptrFile, "<p>Example 1: This file was created from a C program</p>\n"); 
 
  for( i = 0; i< 5; i++) 
  { 
    fprintf( ptrFile, "<p>%d. line</p>\n", i); 
  } 

  fprintf( ptrFile, "</BODY>\n"); 
  fprintf( ptrFile, "</HTML>"); 
  fclose( ptrFile ); 
  
  return EXIT_SUCCESS; 
}

在上面, fopen 函数有两个参数。 首先,文件的名称,在本例中为 index.html。 其次,文件操作,在本例中为“w”,即“写入”以创建新文件。

该函数将返回一个 FILE 指针,该指针存储在变量 ptrFile 中。

使用 fprintf 函数,我们可以将内容写入我们刚刚创建的文件。 这个函数有两个参数。 首先,我们应该在其中写入内容的文件的 FILE 指针。 第二,应该写的内容。 这是一个字符串内容。 请注意,如果文件已经有一些现有内容, fprintf 将附加此内容。

最后,将内容写入文件后,使用 fclose 函数关闭 FILE 指针。

以下是上述c程序的输出。 首先编译 f1.c,它将创建 a.out 可执行文件。 执行 a.out,它将创建包含一些 HTML 内容的 index.html 文件,如下所示。

$ cc f1.c

$ ./a.out

$ cat index.html
<HTML>
 <HEAD> <TITLE> The Geek Stuff </TITLE> </HEAD>
<BODY BGCOLOR="#110022" TEXT="#FFBBAA"> 
<p>Example 1: This file was created from a C program</p>
<p>0. line</p>
<p>1. line</p>
<p>2. line</p>
<p>3. line</p>
<p>4. line</p>
</BODY>

示例二

这与前面的例子类似,但这里只是程序的内容不同。

我们在这里使用 rand 函数来确定要写入的总行数。

我们还将使用 rand 函数通过随机计算一行中应该使用多少个空格和开头来创建一个星号模式。

使用以下示例代码创建 f2.c 程序。

f2.c

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h>

void printBlanks(  int,      FILE* ); 
void printStars (  int, int, FILE* ); 

int main( void ) 
{ 
  FILE      *ptrFile = fopen( "index.html", "w"); 

  int       iNumberOfLines, iNumberOfBlanks, iNumberOfStars; 
  int       iCounter =  1; 
  int       iColor   = -1; 

  iNumberOfLines = iNumberOfBlanks = iNumberOfStars = 0; 

  fprintf( ptrFile, "<HTML>\n "); 
  fprintf( ptrFile, "<HEAD> <TITLE>Example 2</TITLE> </HEAD>\n" );               
  fprintf( ptrFile, "<BODY BGCOLOR=\"#FFFFFF\" > \n");
  fprintf( ptrFile, "<p>Example 2: This file was created from a C program</p>\n");
 
  srand( ( unsigned) time ( NULL ) ); 
  iNumberOfLines = (rand() % 20) + 10; 

  do{ 
    iNumberOfBlanks = ( rand() % 10 ); 
    iNumberOfStars  = ( rand() % 30 ); 
    iColor          = ( rand() % 4  ); 
       
    printBlanks( iNumberOfBlanks, ptrFile ); 
    printStars(  iNumberOfStars, iColor, ptrFile  ); 
       
    iCounter++; 
  } while ( iCounter <= iNumberOfLines ); 

  fprintf( ptrFile, "</BODY>\n"); 
  fprintf( ptrFile, "</HTML>"); 
  fclose( ptrFile ); 
  
  return EXIT_SUCCESS; 
} 

void printBlanks( int   iNumberOfBlanks,  
                  FILE* ptrFile ) 
{ 
  int i; 
  fprintf( ptrFile," <p> " ); 
  for( i = 0; i < iNumberOfBlanks; i++ ) 
  fprintf( ptrFile, " "); 
} 
       
void printStars(  int   iNumberOfStars, 
                  int   iColor, 
                  FILE* ptrFile  ) 
{ 
  int i; 
  switch ( iColor ) 
  { 
    case 0: fprintf( ptrFile,"<font color=\"FF0000\">"); break; 
    case 1: fprintf( ptrFile,"<font color=\"00FF00\">"); break; 
    case 2: fprintf( ptrFile,"<font color=\"0000FF\">"); break; 
    case 3: fprintf( ptrFile,"<font color=\"FFFF00\">"); break; 
  } 
  for( i = 0; i < iNumberOfStars; i++ ) 
    fprintf( ptrFile, "*"); 
     
  fprintf( ptrFile," </font></p>"); 
}

以下是上述程序的部分输出。

$ cc f2.c

$ ./a.out

$ cat index.html 
<HTML>
 <HEAD> <TITLE>Example 2</TITLE> </HEAD>
<BODY BGCOLOR="#FFFFFF" > 
<p>Example 2: This file was created from a C program</p>
...

在上面的例子中,我们在每一行的前面添加了几个空格。 我们还添加了一些颜色字符。 字符的颜色是四种基本颜色之一:蓝色、绿色、黄色或红色。 这种模式重复了几次。 我们正在使用 nbsp 标签来创建空白空间。

示例三

在如何从 C 创建新文件方面,这也类似于前面的示例。

但是,这也需要两个现有文件(original.txt 和 compare.txt),打开它们并进行比较。

然后,这将突出显示输出 html 文件中的差异。

使用以下示例代码创建 f3.c 程序。

f3.c

#include <stdio.h> 
#include <stdlib.h> 

#define EOLN '\n' 

int main( void ) 
{ 
  FILE      *ptrFile           = fopen( "index.html" , "w" ); 
  FILE      *ptrFileOriginal   = fopen( "original.txt"  , "r" ); 
  FILE      *ptrFileCompared   = fopen( "compared.txt" , "r" ); 

  char       cOriginal, cCompared; 
  char       cColor     = 'b'; 

  fprintf( ptrFile, "<HTML>\n "); 
  fprintf( ptrFile, "<HEAD> <TITLE>Example 3: This file was created from a C program</TITLE> </HEAD>\n" ); 
  fprintf( ptrFile, "<BODY TEXT =\"#FFFFFF\" BGCOLOR=\"#000000\" > \n"); 
  fprintf( ptrFile, "<p> <center>COMPARING TWO SAME SIZE FILES</center></p>\n"); 
  fprintf( ptrFile, "<p> \n"); 

  while( (cOriginal = fgetc( ptrFileOriginal ) ) != EOF ) 
  { 
    cCompared = fgetc( ptrFileCompared ); 

    if( ( cOriginal == cCompared ) && ( cColor == 'r' ) ) 
    { 
      fprintf( ptrFile, "</FONT>"); 
      fprintf( ptrFile, "<FONT COLOR=\"00FF00\">"); 
      cColor = 'g'; 
    } 
    else if( ( cOriginal != cCompared ) && ( cColor == 'g' ) ) 
    { 
      fprintf( ptrFile, "</FONT>"); 
      fprintf( ptrFile, "<FONT COLOR=\"FF0000\">"); 
      cColor = 'r'; 
    } 
            
    if( cColor == 'b' ) 
    { 
      if( cOriginal == cCompared) 
      { 
        cColor = 'g'; 
        fprintf( ptrFile, "<FONT COLOR=\"#00FF00\">"); 
                    
      } 
      else 
      { 
        cColor = 'r'; 
        fprintf( ptrFile, "<FONT COLOR=\"#FF0000\">"); 
      } 
      fputc( cOriginal, ptrFile ); 
      continue; 
    } 

    if( cOriginal == EOLN ) 
      fprintf( ptrFile, " <BR> "); 
    else 
      fputc( cOriginal, ptrFile ); 
        
  } 
    
  fprintf( ptrFile, "</FONT></p>" ); 
  fprintf( ptrFile, "</BODY>\n"); 
  fprintf( ptrFile, "</HTML>\n"); 

  fclose( ptrFile );
  fclose( ptrFileOriginal ); fclose( ptrFileCompared ); 
  
  return EXIT_SUCCESS; 
}

为此,我使用以下 original.txt 和 compare.txt 文件作为输入文件。 确保在执行 c 程序之前创建此示例文件。

$ cat original.txt 
line 1
line 2
line 3
$ 
$ 
$ cat compared.txt 
line 4
line 5
line 6

现在,编译并执行 f3.c 程序。 下面显示了上述代码的部分输出。

$ cc f3.c

$ ./a.out

$ cat index.html 
<HTML>
 <HEAD> <TITLE>Example 3: This file was created from a C program</TITLE> </HEAD>
<BODY TEXT ="#FFFFFF" BGCOLOR="#000000" > 
<p> <center>COMPARING TWO SAME SIZE FILES</center></p>
<p> 
<FONT COLOR="#00FF00">line </FONT><FONT COLOR="FF0000">1</FONT><FONT COLOR="00FF00"> <BR> line </FONT><FONT COLOR="FF0000">2</FONT><FONT COLOR="00FF00"> <BR> line </FONT><FONT COLOR="FF0000">3</FONT><FONT COLOR="00FF00"> <BR> </FONT></p></BODY>
</HTML>