说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

初学编程,请教个小问题

编辑:说三道四文库 发布时间:2018-02-21 11:29
HTML文档下载 WORD文档下载 PDF文档下载
小弟我刚学了一个多月C语言,最近编了一个文件分割器,碰到了点麻烦,就是找不到文件末尾(反映在非纯文本文件上)。用EOF的方法,往往读到几K就退出,查了下知道为了读取二进制文件,有个feof(fp)的函数,但是居然也没有用,如何解决这个问题,还望大虾指教!


我的filecopy函数代码如下:

int filecopy(FILE *fpin,FILE *fpout,unsigned long int maxlen)    
/*拷贝fpin到fpout,如果到规定大小则退出,指针指向下一个字节*/
{ int c,flag;
unsigned long int i=0;

while((c=getc(fpin))!=EOF){
putc(c,fpout);
                 ++i;
if(i>maxlen-2){
flag=1;
goto end;
}
}
flag=0;
end:
return flag; /*如果文件没有结束,返回1,否则返回0。*/

}

maxlen?
maxlen是分割后文件的长度。
/* EOF.C: This program reads data from a file
 * ten bytes at a time until the end of the
 * file is reached or an error is encountered.
 */
#include <io.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
void main( void )
{
   int  fh, count, total = 0;
   char buf[10];
   if( (fh = _open( "eof.c", _O_RDONLY )) == - 1 )
   {
        perror( "Open failed");
        exit( 1 );
   }
   /* Cycle until end of file reached: */
   while( !_eof( fh ) )
   {
      /* Attempt to read in 10 bytes: */
      if( (count = _read( fh, buf, 10 )) == -1 )
      {
         perror( "Read error" );
         break;
      }
      /* Total actual bytes read */
      total += count;
   }
   printf( "Number of bytes read = %d\n", total );
   _close( fh );
}
可以看看这个。
谢谢!这样真的可以读完文件,但是能不能烦劳讲解一下?我有很多看不明白的地方。

#include <io.h>
#include <fcntl.h>     //这两个头文件分别包含了什么函数?io.h和stdio.h的不同?
#include <stdio.h>
#include <stdlib.h>
void main( void )
{
   int  fh, count, total = 0;
   char buf[10];
   if( (fh = _open( "eof.c", _O_RDONLY )) == - 1 )   //_open的调用方法?为什么它  返回的是int值?这个fh代表的是什么?_O_RDONLY是什么意思?
   {
        perror( "Open failed");
        exit( 1 );
   }
   /* Cycle until end of file reached: */
   while( !_eof( fh ) )           //同上,不太明白fh的意思,_eof和feof有什么不一样?
   {
      /* Attempt to read in 10 bytes: */
      if( (count = _read( fh, buf, 10 )) == -1 )   //_read的意思,调用方法,返回值
      {
         perror( "Read error" );
         break;
      }
      /* Total actual bytes read */
      total += count;
   }
   printf( "Number of bytes read = %d\n", total );
   _close( fh );
}

这里的很多函数,包括头文件我的书(教材《C程序设计》(谭浩强)、《The C Programming Language》(K&R))里都没有,这些是不是ANSI标准的?是不是标准的C语法(或是C++)?我刚学C语言,不想把概念搞混淆了,其实现在我已经挺糊涂了。:)


又出了点问题,我在用这段代码改编一个实验性程序的时候,发现读出的数据有些不对,比如我有一个4.65M的a.rm,读出后为4.66M,播放器不能播放。请问问题何在。

#include <io.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
void main( void )
{
   int  fin,fout, count, total = 0;

   char buf[10];
   if( (fin = open( "cs.rm", _O_RDONLY )) == - 1 )
   {
        perror( "Open failed");
        exit( 1 );
   }
   if( (fout = open( "a.rm", _O_CREAT | _O_WRONLY )) == - 1 )
   {
        perror( "Open failed");
        exit( 2 );
   }

   /* Cycle until end of file reached: */
   while( !eof( fin ) )
   {
      /* Attempt to read in 10 bytes: */
      if( (count = read( fin, buf, 10)) == -1 )
      {
         perror( "Read error" );
         break;
      }
      /* Total actual bytes read */

  total += count;
  _write( fout, buf, 10);       /* Copy buffer to fout*/
   }
   printf( "Number of bytes copied = %d\n", total );

   close( fin );
   close( fout);
}

up
难道没有人回答吗?!我又碰到一个问题,同样的程序,我将buf设成不同的容量为什么会得到不同的total值?比如buf[10]的时候total==47000,buf[200]的时候total==3XXXX
up
你挺厉害的嘛,才学了一个月就学会这么多呀,我学了一个月才刚刚能看懂别人编的程序,你现在就能写了,叫我好声佩服,你在哪里学的,我们可以交个朋友吗?  我的QQ182278155
果然厉害.
并不是说厉害,学习就是要写程序的呀,我喜欢一边写一边进行学习,这样容易发现问题,学到东西。还有,多看点书,我都是两三本书一起看。最后,我原来的程序是我自己写的,后来那个(第六贴)的是MSDN上的:)我自己改了改,看起来要比我原来那个好多了:)
上面用到的好象是WINDOWS的一些API,具体的你可以去查一下WINDOWS API 的一些书籍
初学者too,UP一下!~
我希望用C就能解决这个问题,如果用到API的话,我的问题岂不是没有意义了?我就是想学到点东西,而且我现在离解决很进了……(只是在拷贝的时候多了0.01M呀……)就差哪位高手点拨一下了……而且微软的东西太没保障了,今天学了,明天他推出一个全新的东西就把你以前的全推翻了……还是学C比较好,通用性强,又可以为学别的语言打下很好的基础
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘