文档章节

使用fseek()函数随机访问文件

努力喵
 努力喵
发布于 2015/10/20 23:29
字数 244
阅读 6
收藏 0
// randomfile.c -- 使用fseek()函数随机访问文件
#include <stdio.h>
#include <stdlib.h>
#define MAX 50

int main(void){
  FILE *fp;
  int data, count, array[MAX];
  long offset;
  
  // 为数组各元素赋值
  for(count = 0; count < MAX; count++)
    array[count] = count * 10;
  
  // 以写入模式打开二进制文件
  if((fp = fopen("RANDOM.DAT", "wb")) == NULL){
    fprintf(stderr, "Error opening file.");
    exit(1);
  } 
  
  // 将数组写入文件,然后关闭文件
   if((fwrite(array, sizeof(int), MAX, fp)) != MAX){
     fprintf(stderr, "Error writing data to file.");
     exit(1);
   }
   fclose(fp);
   
   // 以二进制模式打开文件
   if((fp = fopen("RANDOM.DAT", "rb")) == NULL){
     fprintf(stderr, "Error opening file.");
     exit(1);
   }
   
   /*询问用户希望读取哪一个元素。
     输入该元素并显示它,用户输入-1时退出程序*/
    while(1){
      printf("\nEnter element to read, 0-%d, -1 to quit: ", MAX-1);
      scanf("%ld", &offset);
      
      if(offset < 0)
        break;
      else if(offset > MAX-1)
        continue;
      
      //将位置指示符移至制定元素
      if((fseek(fp, (offset * sizeof(int)), SEEK_SET)) != 0){
        fprintf(stderr, "Error using fseek().");
        exit(1);
      }
      fread(&data, sizeof(int), 1, fp);
      printf("\nElement %ld has value %d.", offset, data);
  }
  fclose(fp);
  return 0;
}


© 著作权归作者所有

共有 人打赏支持
努力喵
粉丝 5
博文 105
码字总数 34117
作品 0
广州
CStdioFile::Seek

重新定位在以前打开的文件的指针。 LONGLONG lOff,UINT nFrom); 参数 lOff 将指针的字节数。 nFrom 指针移到模式。 必须为下列值之一: CFile::begin:转到文件指针 lOff 字节从最初文件。 CF...

barsoom
2013/01/31
0
0
Python读取文件最末N行,实现Linux的tail命令功能

原文地址:http://shajunxing.tpddns.cn:8888/web/blog/2018-04-17-Python读取文件最末N行,实现Linux的tail命令功能/index.html 思路 主要使用fseek()函数的随机读写能力,从文件末尾按子节...

shajunxing
04/17
0
0
最全C语言文件操作谈不上,C语言基础教程之文件操作

C语言文件读写 一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备上的文件。文件管理的基本流程如...

诸葛青云999
08/18
0
0
转载-C语言FILE类型与标准I/O流

<cstdio> (stdio.h) - C++ Reference http://www.cplusplus.com/reference/cstdio/ 标准IO以及文件IO。 标准IO:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文...

zray4u
2016/07/15
29
0
为什么说很多NoSQL的Benchmark是扯淡?

正如原作者所言,本文有标题党之嫌,但确实道出了一个众所周知的问题。就是很多NoSQL产品的官方 benchmark 过高。虽然本人并不完全同意作者的观点,但是其不盲从轻信较劲的态度还是值得学习。...

红薯
2011/09/19
1K
13

没有更多内容

加载失败,请刷新页面

加载更多

Redis开发规范

一、键值设计 1.1 key名设计 (1)【建议】: 可读性和可管理性 以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id ugc:video:1 (2)【建议】:简洁性 保证语义的前提下...

IT--小哥
21分钟前
1
0
crunch 練習

crunch 10 10 -t 09%%%%%%%% -o tw_mobile_number.lst

BaiyuanLab
36分钟前
0
0
Kafka技术资料总结(不断更新中)

1、Kafka实践:到底该不该把不同类型的消息放在同一个主题中 2、Kafka剖析系列: Kafka剖析(一):Kafka背景及架构介绍 Kafka设计解析(二):Kafka High Availability (上) Kafka设计解析...

九州暮云
今天
2
0
面向对象设计原则(OOP)

单一职责原则(Single responsibility principle)又称单一功能原则。它规定一个类应该只有一个发生变化的原因。 核心原则:低耦合,高内聚。 一个类,应该只有一个引起它变化的原因,也就是...

gackey
今天
5
0
C++ 锁

C++提供了两种常用的锁,std::lock_guard<Lockable &T>和std::unique_lock<Lockable &T>。通常使用场景下,这两个锁用法一致。即,在构造锁对象时上锁,在析构锁对象时解锁。使用户从上锁/解...

yepanl
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部