`

fread / fwrite返回 0 的问题

阅读更多

 

 

fread的函数原型是(来自MSDN):

size_t fread( void *buffer, size_t size, size_t count, FILE *stream );

 

我们用fread读的时候,有时会把size设置为整数,比如:300。然后我们可能用一个循环来读取文件的内容:

while ((iBytesRead = fread (buf, 300, 1, fin)) > 0) {

// 具体代码略

}

若有一个文件,它的内容大约为213 bytes,那么,用这个语句来读的话,就会进不到循环里面去了,因为fread返回的是实际所读取的块数!那么一个块是300 bytes,而此文件全部内容加起来也才213 bytes,小于300 bytes。也就是说,读到的数据不足一块,那么只能返回0了,于是不会进入循环~~

 

所以,如果想fread返回读取的具体byte数的话,应该把size count 的位置对调,变成这样:

while ((iBytesRead = fread (buf, 1, 300, fin)) > 0) {

// 具体代码略

}

0
1
分享到:
评论

相关推荐

    C语言fread和fwrite

    需要注意的是,`fread`和`fwrite`不处理字符串的终止符`\0`,所以在读写字符串时,通常需要额外考虑。 在实际编程中,`fread`和`fwrite`常用于批量处理二进制数据,如图像、音频、数据库记录等。这两个函数可以高效...

    为什么fread(),fwrite()的返回值总是为0,但是读写文件正常

    3. **错误条件**:如果文件流有错误(比如打开失败、权限问题等),`fread()` 和 `fwrite()` 可能会立即返回0,并设置 `errno` 或 `ferror(stream)` 以标识错误。 4. **缓冲区溢出**:确保提供的缓冲区大小足以容纳...

    为什么fwrite写文件后,用fread读出来文件长度是0,即fread读不出数据

    当你遇到“`fwrite` 写文件后,用 `fread` 读出来文件长度是0,即 `fread` 读不出数据”的问题时,可能存在以下几个原因: 1. **文件打开模式错误**: - 当你使用 `fopen` 函数打开文件时,使用的模式可能只允许...

    fread,fwrite函数的参数2和参数3的正确顺序

    在C语言中,`fread` 和 `fwrite` 是用于从磁盘文件中读取和写入数据的函数,它们都是标准输入/输出库(stdio.h)的一部分。这两个函数在处理二进制数据时非常有用,例如图像、音频或自定义格式的数据。`fread` 和 `...

    C语言fread函数和fwrite函数的用法及其实例

    ### C语言fread函数和fwrite函数的深入解析 在C语言中,`fread`和`fwrite`函数是处理文件二进制读写的核心工具,它们允许程序员以更高效的方式在内存与磁盘文件之间传输数据,尤其适用于大量数据的处理场景。与`...

    uwrite/uread:UREAD/UWRITE 与 FREAD/FWRITE 类似,只是它们对内存中的数组进行操作。-matlab开发

    A=UWRITE(D, PREC) 将从 double 数组 D 创建一个 uint8 数组 A。... D=UREAD(A, N, PREC) 将读取 uint8 数组 A 并将 N 个值返回到 D。假设 A 中的数据采用 PREC 格式(有关支持的格式,请参阅 UWRITE)。

    c++相关技术 fread

    该函数可以读取最多 count 个元素,每个元素 size 字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。 函数原型:`size_t fread ( void *buffer, size_t size, size_t count, FILE *...

    Matlab中二进制数据的读取2.pdf

    fread函数是读取二进制数据的核心工具,它需要文件标识符(由fopen函数返回)作为第一个参数,可以指定读取的字节数量和数据类型。例如,`fread(fid)`会读取整个文件,`fread(fid, n)`会读取n个字节,而`fread(fid, ...

    Matlab中二进制数据的读取2.docx

    fread是常用的二进制数据读取函数,它能从文件中读取指定精度的数据,并以矩阵形式返回。例如,如果有一个名为'test.txt'的文件,我们可以通过以下方式读取其内容: ```matlab f = fopen('test.txt', 'r'); data = ...

    操作系统实现cp命令

    操作系统实现cp命令是计算机科学领域中的一种基本操作,通过实验,我们可以了解Linux操作系统中的一些常用的命令,并且可以使用read、write、fread和fwrite四种函数来实现cp命令。此外,我们还可以了解fread、read...

    swfile.rar_fread text_fread 二进制_二进制文件_读写文件

    在编程领域,尤其是在C语言中,`fread`和`fwrite`函数是处理文件读写操作的基本工具。这两个函数属于标准库stdio.h的一部分,适用于处理文本文件和二进制文件。`fread`用于从文件中读取数据,而`fwrite`则用于向文件...

    c语言文件读写操作fopen()`、`fclose()`、`fread()`、`fwrite()`、`fprintf()`

    本文将详细介绍以下六个关键的文件操作函数:`fopen()`、`fclose()`、`fread()`、`fwrite()`、`fprintf()`以及`fscanf()`。 #### 二、`fopen()` — 打开文件 **函数原型**: ```c FILE *fopen(const char *filename...

    Vxworks学习笔记

    25 read/write、fread/fwrite、fopen/open有什么区别 96 26 快速启动??????????????? 100 27 启动时报ATA0a和硬盘启动相关问题 100 28 如何安装USB2.2新版本及编译USB驱动? 101 29 WindML、图形界面相关问题 102 ...

    Matlab文件操作及读txt文件(fopen,fseek,fread,fclose).pdf

    关闭文件用 `fclose` 函数,调用格式为:`sta=fclose(fid)`,其中 `sta` 表示关闭文件操作的返回代码,若关闭成功,返回 0,否则返回 -1。如果要关闭所有已打开的文件,用 `fclose('all')`。 二进制文件的读写操作...

    1.系统IO(1).rar

    1. 缓冲I/O:通过内存缓冲区提高效率,减少对硬件的频繁访问,如stdio库中的fread/fwrite。 2. 无缓冲I/O:直接与硬件交互,如read/write系统调用。 五、I/O复用与多路复用 1. I/O复用:select、poll、epoll等...

    C语言读取文件流的相关函数用法简介

    feof()函数的返回值为非零值,表示已经读到了文件尾,否则返回0。 例如,下面是一个使用feof()函数检查文件流是否读到了文件尾的示例代码: ```c #include int main() { FILE *stream; char buffer[1024]; ...

    c语言文件读写函数

    - `fwrite` 函数则相反,用于向文件写入数据块,调用格式为 `fwrite(buffer, size, count, fp)`,用法与 `fread` 类似。 4. 格式化函数: - `fprintf` 用于格式化输出到文件,其基本语法是 `fprintf(fp, "格式...

    MATLAB入门_MATLAB智能算法代码.zip

    可以使用fread/fwrite处理二进制文件,textread/textwrite处理文本文件,save/load用于保存和加载MATLAB工作空间的数据。 第五,MATLAB的绘图功能强大,可以创建2D和3D图形。例如,plot函数用于绘制2D线条图,surf...

    block_read_write_txt.zip_fwrite

    这段代码首先定义了一个固定大小的缓冲区,然后使用`fread`从源文件中读取数据,用`fwrite`将数据写入目标文件。这个过程持续到源文件的末尾。注意,使用`feof`检查文件结束不是非常可靠,通常应结合读取返回值来...

Global site tag (gtag.js) - Google Analytics