C 是否可以停止文件中间的文件扫描? 可以停止文件中间的文件扫描吗? 例如,如果我想将此代码更改为大小为/2的For循环

C 是否可以停止文件中间的文件扫描? 可以停止文件中间的文件扫描吗? 例如,如果我想将此代码更改为大小为/2的For循环,c,file,C,File,编辑:你能帮我理解我为什么这么做吗!=托斯卡纳尺寸(第二尺寸) 可以,然后,在循环中: for (i = 0; i < file_size / 2; i++) { int c = fgetc(file); ... } for(i=0;i

编辑:你能帮我理解我为什么这么做吗!=托斯卡纳尺寸(第二尺寸)

可以,然后,在循环中:

for (i = 0; i < file_size / 2; i++) {
    int c = fgetc(file);
    ...
}
for(i=0;i
例如:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *file;
    long size, i;
    int c;

    file = fopen("demo.c", "rb");
    if (file == NULL) {
        perror("fopen");
        exit(EXIT_FAILURE);
    }
    if (fseek(file, 0, SEEK_END) == -1) {
        perror("fseek");
        exit(EXIT_FAILURE);
    }
    size = ftell(file);
    if (size == -1) {
        perror("ftell");
        exit(EXIT_FAILURE);
    }
    if (fseek(file, 0, SEEK_SET) == -1) {
        perror("fseek");
        exit(EXIT_FAILURE);
    }
    for (i = 0; i < size / 2; i++) {
        c = fgetc(file);
        putchar(c);
    }
    fclose(file);
    return 0;
}
#包括
#包括
内部主(空)
{
文件*文件;
长尺寸,我;
INTC;
file=fopen(“demo.c”、“rb”);
if(file==NULL){
佩罗尔(“福彭”);
退出(退出失败);
}
如果(fseek(文件,0,搜索结束)=-1){
perror(“fseek”);
退出(退出失败);
}
大小=ftell(文件);
如果(大小==-1){
佩罗(“ftell”);
退出(退出失败);
}
if(fseek(文件,0,搜索集)=-1){
perror(“fseek”);
退出(退出失败);
}
对于(i=0;i
当然,有一种情况是,您正在进行对冲操作,这将停止扫描。正确的?满足这一条件肯定会打破你的循环。那么你到底想解决什么问题呢?这属于你的问题。发布的代码会丢弃文件中的数据,在其他方面几乎毫无意义。确定。只需停止读取文件。如果你真的想让它处于中间位置,先算出它有多大,然后读取一半的字节。当你说“中间”时,你指的是文件的确切“中间”位置吗?@DavidHoelzer我用的是
size/=2;)使用
fseek(…,SEEK_END)
到达二进制文件的结尾是明确的未定义行为:“7.21.9.2
fseek
函数…二进制流不需要有意义地支持
fseek
调用,调用值为
SEEK_END
,脚注268:“将文件位置指示符设置为文件结尾,就像使用
fseek(文件,0,SEEK\u end)
一样,对于二进制流,具有未定义的行为。。。“@AndrewHenle哇,我不知道,有跨平台的替代方案吗?@KeineLust你能帮我吗?”?看看编辑,你能帮我把这个代码改成for循环而不是while吗?@KeineLust据我所知,没有一种严格一致的可移植的方法可以轻松获得C语言中文件的大小。我所知道的获取文件大小的唯一严格一致、可移植的方法是读取整个文件并计算字节数。
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *file;
    long size, i;
    int c;

    file = fopen("demo.c", "rb");
    if (file == NULL) {
        perror("fopen");
        exit(EXIT_FAILURE);
    }
    if (fseek(file, 0, SEEK_END) == -1) {
        perror("fseek");
        exit(EXIT_FAILURE);
    }
    size = ftell(file);
    if (size == -1) {
        perror("ftell");
        exit(EXIT_FAILURE);
    }
    if (fseek(file, 0, SEEK_SET) == -1) {
        perror("fseek");
        exit(EXIT_FAILURE);
    }
    for (i = 0; i < size / 2; i++) {
        c = fgetc(file);
        putchar(c);
    }
    fclose(file);
    return 0;
}