文件函数fread()获取文件的内容的问题,在线等,急啊!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件函数fread()获取文件的内容的问题,在线等,急啊!相关的知识,希望对你有一定的参考价值。
我用fread()函数去读取一个二进制文件,,然后将读到的内容打印出来,我是这样写的:
fread(fa,1,2,fp);
printf("%s",fa);
但是打印出来的结果是错误的,是怎么回事,求解答!
参 数:
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()获取文件的内容的问题,在线等,急啊!的主要内容,如果未能解决你的问题,请参考以下文章