文件函数fread()获取文件的内容的问题,在线等,急啊!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件函数fread()获取文件的内容的问题,在线等,急啊!相关的知识,希望对你有一定的参考价值。

我用fread()函数去读取一个二进制文件,,然后将读到的内容打印出来,我是这样写的:
fread(fa,1,2,fp);
printf("%s",fa);
但是打印出来的结果是错误的,是怎么回事,求解答!

函数原型: size_t fread( void *buffer, size_t size, size_t count, FILE *stream ); 
  参 数:
  1.用于接收数据的地址(指针)(buffer)
  2.单个元素的大小(size) :单位是字节而不是位,例如读取一个整型数就是2个字节
  3.元素个数(count)
  4.提供数据的文件指针(stream)
  返回值:成功读取的元素个数

给你一个例子 你看一下
  #include <stdio.h>
  void main( void )
  
  FILE *stream;
  char list[30];
  int i, numread, numwritten;
  /* Open file in text mode: */
  if( (stream = fopen( "fread.out", "w+t" )) != NULL )
  
  for ( i = 0; i < 25; i++ )
  list[i] = (char)('z' - i);
  /* Write 25 characters to stream */
  numwritten = fwrite( list, sizeof( char ), 25, stream );
  printf( "Wrote %d items\n", numwritten );
  fclose( stream );
  
  else
  printf( "Problem opening the file\n" );
  if( (stream = fopen( "fread.out", "r+t" )) != NULL )
  
  /* Attempt to read in 25 characters */
  numread = fread( list, sizeof( char ), 25, stream );
  printf( "Number of items read = %d\n", numread );
  printf( "Contents of buffer = %.25s\n", list );
  fclose( stream );
  
  else
  printf( "File could not be opened\n" );
  
参考技术A fread的原型见353951452的回答。
我建议可以这样写:
//声明用到的变量
unsigned char fa[3];
unsigned short ret;
unsigned short idx;
//从文件中读取最多两个字节的数据
ret=fread(fa, 1, 2, fp);
//根据返回的读取到的数据数量,按十六进制的方式和相应的ASCII方式打印出来。
for (idx=0;idx<ret;idx++)
printf("0x%02x(%c) ", fa[idx], fa[idx]);

printf("\n");
参考技术B 假如你当前目录有个二进制文件abc, 你可一参考下面程序来读它
#include <stdio.h>
#include <stdlib.h>

int main(void)

size_t len;
char buf[128];
FILE *fp = fopen("abc", "rb");
fseek(fp, 0, SEEK_END);
len = ftell(fp);
fread(buf, 1, len, fp);
printf("%s", buf);
fclose(fp);
return 0;

从 fread()、file_get_contents() 等获取读取文件

【中文标题】从 fread()、file_get_contents() 等获取读取文件【英文标题】:Get read files from fread(), file_get_contents() etc 【发布时间】:2016-04-20 20:08:28 【问题描述】:

我有一个复杂的 Web 应用程序,它读取和写入大量文件(xml、css、js、jpg 等)。出于清理目的,在关闭函数中,我想记录使用 PHP 中的各种文件方法之一读取(和写入)的文件名,例如fread()、file_get_contents()、readfile() 等等。

我找不到类似 get_included_files() 的方法,而且我很确定没有简单的方法可以实现这一目标。但是有人知道可能更复杂的逻辑吗?

【问题讨论】:

【参考方案1】:

不,但您可以创建一个包装函数来为您记录所有这些信息。

<?

$__modifiedFiles = array();

function fetch_file($file) 
    global $__modifiedFiles;
    $__modifiedFiles[] = $file;
    return file_get_contents($file);


function get_modified_files() 
    global $__modifiedFiles;
    return $__modifiedFiles;

或者...也许您可以使用 incron 来捕获文件系统上发生的事件:

http://manpages.ubuntu.com/manpages/intrepid/man5/incrontab.5.html

或者...也许您可以使用find 命令递归查找修改过的文件:

How to recursively find and list the latest modified files in a directory with subdirectories and times?

【讨论】:

incrontab 方法看起来很有前途,虽然这里最复杂。也许我会选择包装器逻辑,因为这很简单并且无需第三方软件即可工作。 我最终每 10 分钟运行一次 PHP 脚本,检查文档根目录中所有文件的 fileatime(),将自上次执行后修改的文件名记录到数据库中的统计表中。唯一的问题是访问时间似乎并没有在每次读取时更新。可能是由于文件系统的“relatime”挂载选项。

以上是关于文件函数fread()获取文件的内容的问题,在线等,急啊!的主要内容,如果未能解决你的问题,请参考以下文章

fread()函数如何判断是不是到文件末尾?

php fread()函数读取文本直到文件尾却无法结束

函数 fread 不以 \0 终止字符串

使用 fread 函数读取二进制文件时出现问题

如何使用 fread 函数读取 CSV 文件的特定行

读的是exe可执行文件 fread返回值是1024,但是buf里面怎么没有内容??