举个例子:假如有个文本文件sample.txt内容为 12345
我要把它拷贝到另外一个文本文件sample2.txt中..我的实现方法如下:
  FILE *stream;
  FILE *desFile;
  int  i, j, ch;
  bool StopWrite = false;
  /* Open file to read line from: */
  if( (stream = fopen( "sample.txt", "r" )) == NULL )
    exit( 0 );  /* Get file length */
  fseek(stream, 0, SEEK_END);
  unsigned int len = ftell(stream);
  rewind(stream);  char* buffer = new char[len];
  /* Read all characters and place them in "buffer": */
  ch = fgetc( stream );  for( i=0,j=0; (i < (int)len ) && ( feof( stream ) == 0 ) ; i++ )
  {
    buffer[j] = (char)ch;
    ch = fgetc(stream);
    j++;
  }
  buffer[j] = '\0';
  fclose( stream );
  if( (desFile = fopen( "sample2.txt", "w+t" )) != NULL )
   {
      /* Write characters to stream */
      fwrite( buffer, sizeof( char ), strlen(buffer), desFile );
      fclose( desFile );   }
   else
      MessageBox( "Problem opening the file\n" );
  /* delete buffer */
   delete [] buffer;  编译通过后再运行,会弹出非法操作的错误提示框..请问这段代码哪里出现了问题呢?

解决方案 »

  1.   

    你的bufer小了:既然你需要写入一个额外的'\0',就需要多一个字节;你写入文件的逻辑也不是很合理:写入的长度应当和源文件的长度(len,你已经取得了源文件的长度)相同才好,不应当是buffer的长度。
      

  2.   

    谢谢楼上的,我改过来了,,现在没错了.
    FILE *stream;
      FILE *desFile;
      int  i, j, ch;
      bool StopWrite = false;
      /* Open file to read line from: */
      if( (stream = fopen( "sample.txt", "r" )) == NULL )
        exit( 0 );  /* Get file length */
      fseek(stream, 0, SEEK_END);
      unsigned int len = ftell(stream);
      rewind(stream);  char* buffer = new char[len];
      /* Read all characters and place them in "buffer": */
      ch = fgetc( stream );  for( i=0,j=0; (i < (int)len ) && ( feof( stream ) == 0 ) ; i++ )
      {
        buffer[j] = (char)ch;
        ch = fgetc(stream);
        j++;
      }
    //  buffer[j] = '\0';
      fclose( stream );
      if( (desFile = fopen( "sample2.txt", "w+t" )) != NULL )
       {
          /* Write characters to stream */
          fwrite( buffer, sizeof( char ), len, desFile );
          fclose( desFile );   }
       else
          MessageBox( "Problem opening the file\n" );
      /* delete buffer */
       delete [] buffer;