c语言lseek函数的用法(c语言 怎么样把一个三维数组写入一个txt的文件然后读入另一个三维数组里)
本文目录
- c语言 怎么样把一个三维数组写入一个txt的文件然后读入另一个三维数组里
- 问一个关于lseek函数的效率问题
- 用C语言实现文件读写操作(4)
- 关于lseek的用法!急!!
- 怎样用lseek()函数将一个文件的内容附加到另一个文件上
- 为什么C语言中read函数和write函数间要用lseek来调整读取顺序
- C语言,更改指定位置数据文件内容,求大神
- C语言中的read和write怎么用
- 如何用C语言读写文件
- c语言实现文件内容某行删除
c语言 怎么样把一个三维数组写入一个txt的文件然后读入另一个三维数组里
现在是你在写程序 ,具体的写入顺序是由你自己定义的,你想怎么写就怎么写!但是 就读写来说: C 语言的读写文件函数里面是一个读写指针,如果是需要写完之后去读的话 需要移动文件读写指针到文件开头才能正常读写。 下面是几个有用的函数(百科都有的) ***隐藏网址*** 重定位流(数据流/文件)上的文件内部位置指针注意:不是定位文件指针,文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件。本段用 法int fseek(FILE *stream, long offset, int fromwhere);本段描 述函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头0(SEEK_SET),当前位置1(SEEK_CUR),文件尾2(SEEK_END))为基准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整型。***隐藏网址***函数fopen函数简介函数功能:打开一个文件函数原型:FILE * fopen(const char * path,const char * mode);相关函数:open,fclose,fopen_s,_wfopen所需库:《stdio.h》返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。一般而言,打开文件后会作一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。 ***隐藏网址***fwrite本段功能C语言函数,向文件写入一个数据块本段用法size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);注意:这个函数以二进制形式对文件进行操作,不局限于文本文件返回值:返回实际写入的数据块数目(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址;(2)size:要写入内容的单字节数;(3)count:要进行写入size字节的数据项的个数;(4)stream:目标文件指针;(5)返回实际写入的数据项个数count。说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。fseek对此函数有作用,但是fwrite函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步。
问一个关于lseek函数的效率问题
lseek是库函数。库函数就是C++最基本的函数,也就是说没有这些东西无法定义C++。C++的制定标准,并不决定库函数的底层是如何实现的,主要决定实现结果和大致逻辑。所以,对于不同系统不同型号机器的lseek,它的实现是不一样的。在大多数系统中,lssek的执行只是改变一个内存中的值。计算机读取磁盘很慢,而内存很快,于是操作系统在内存中会事先保存好多值,当下一个读盘周期开始的时候,计算机会以最优化的读取顺序读取内存中设置的磁盘位置,lssek改变的就是那个位置。所以耗时依赖你的系统和硬件,10000 比100未必慢
用C语言实现文件读写操作(4)
用C语言实现文件读写操作
二、直接I/O文件操作
这是C提供的另一种文件操作,它是通过直接存/取文件来完成对文件的处理,而上篇所说流式文件操作是通过缓冲区来进行;流式文件操作是围绕一个 FILE指针来进行,而此类文件操作是围绕一个文件的“句柄”来进行,什么是句柄呢?它是一个整数,是系统用来标识一个文件(在WINDOWS中,句柄的概念扩展到所有设备资源的标识)的唯一的记号。此类文件操作常用的函数如下表,这些函数及其所用的一些符号在io.h和fcntl.h中定义,在使用时要加入相应的头文件。
函数 说明
open() 打开一个文件并返回它的句柄
close() 关闭一个句柄
lseek() 定位到文件的指定位置
read() 块读文件
write() 块写文件
eof() 测试文件是否结束
filelength() 取得文件长度
rename() 重命名文件
chsize() 改变文件长度
下面就对这些函数一一说明:
1.open()
打开一个文件并返回它的句柄,如果失败,将返回一个小于0的值,原型是int open(const char *path, int access ); 参数path是要打开的文件名,access是打开的模式,mode是可选项。表示文件的属性,主要用于UNIX系统中,在DOS/WINDOWS这个参数没有意义。其中文件的打开模式如下表。
符号 含义 符号 含义 符号 含义
O_RDONLY 只读方式 O_WRONLY 只写方式 O_RDWR 读/写方式
O_NDELAY 用于UNIX系统 O_APPEND 追加方式 O_CREAT 如果文件不存在就创建
O_TRUNC 把文件长度截为0 O_EXCL 和O_CREAT连用,如果文件存在返回错误 O_BINARY 二进制方式
O_TEXT 文本方式
对于多个要求,可以用"|"运算符来连接,如O_APPEND|O_TEXT表示以文本模式和追加方式打开文件。
例:int handle=open("c:\\msdos.sys",O_BINARY|O_CREAT|O_WRITE)
2.close()
关闭一个句柄,原型是int close(int handle);如果成功返回0
例:close(handle)
3.lseek()
定位到指定的位置,原型是:long lseek(int handle, long offset, int fromwhere);参数offset是移动的量,fromwhere是移动的基准位置,取值和前面讲的fseek()一样,SEEK_SET:文件首部;SEEK_CUR:文件当前位置;SEEK_END:文件尾。此函数返回执行后文件新的存取位置。
例:
lseek(handle,-1234L,SEEK_CUR);//把存取位置从当前位置向前移动1234个字节。
x=lseek(hnd1,0L,SEEK_END);//把存取位置移动到文件尾,x=文件尾的位置即文件长度
4.read()
从文件读取一块,原型是int read(int handle, void *buf, unsigned len);参数buf保存读出的数据,len是读取的字节。函数返回实际读出的字节。
例:char x;read(hnd1,x,200);
5.write()
写一块数据到文件中,原型是int write(int handle, void *buf, unsigned len);参数的含义同read(),返回实际写入的字节。
例:char x="I Love You";write(handle,x,strlen(x));
7.eof()
类似feof(),测试文件是否结束,是返回1,否则返回0;原型是:int eof(int handle);
例:while(!eof(handle1)){……};
8.filelength()
返回文件长度,原型是long filelength(int handle);相当于lseek(handle,0L,SEEK_END)
例:long x=filelength(handle);
9.rename()
重命名文件,原型是int rename(const char *oldname, const char *newname); 参数oldname是旧文件名,newname是新文件名。成功返回0
例:rename("c:\\config.sys","c:\\config.w40");
10.chsize();
改变文件长度,原型是int chsize(int handle, long size);参数size表示文件新的长度,成功返回0,否则返回-1,如果指定的长度小于文件长度,则文件被截短;如果指定的长度大于文件长度,则在文件后面补’’\0’’。
例:chsize(handle,0x12345);
;
关于lseek的用法!急!!
思路是这样的。我想你的意思是说在文件中有两份同样的数据,一份在前面未排序,一会在后面,排序方法很简单。先移至末尾,会吧,这个简单然后利用tell函数求出文件长度(在末尾时候的偏移就是文件长度)除以2的值就是要移动去的地方,再移动到文件的中间即可
怎样用lseek()函数将一个文件的内容附加到另一个文件上
int main(){ int iSrcFd = 0; int iDesFd = 0; CHAR acReadBuf = {0}; int iReadBytes = 0; int iWrtBytes = 0; /* open the source file*/ iSrcFd = open("1.txt",O_RDWR | O_SYNC); if (iSrcFd 《 0) { return -1; } iReadBytes = read(iSrcFd, acReadBuf, 128); /* open the des file */ iDesFd = open("2.txt",O_RDWR | O_SYNC); if (iSrcFd 《 0) { close(iSrcFd); return -1; } lseek(iDesFd, 0, SEEK_END); iWrtBytes = write(iDesFd, acReadBuf, 128); close(iDesFd); close(iSrcFd); return 0;} lseek(iDesFd, 0, SEEK_END);就是将当前文件读写的位置移动到文件末尾
为什么C语言中read函数和write函数间要用lseek来调整读取顺序
-由于程序在打开文件时文件操作指针位于文件起始位置,即偏移量0-读取了1个字符的内容给变量c,文件指针偏移量为1-这时如果想将c值写到文件开始位置,则需要移动文件指针到文件开始-于是lseek就是移动文件当前指针的语句,它通知系统将文件指针移动到从文件开始位置(SEEK_SER)起的第0字节-这个程序比较奇怪,明明打开文件时选用了0_WRONLY参数,表明这个打开是只写的,但上来就读
C语言,更改指定位置数据文件内容,求大神
你这里的student是结构体吧,这里使用open打开文件:
void fun(student *stu,char *f_name,int id){int i = 0;int j = 0;int fd;fd = open(f_name, O_RDWR);for(i = 0;i《N ;i++){read(fd, stu, sizeof(student));if((stu-》id) == id){(stu-》grade1) = (stu-》grade1)+3.0;(stu-》grade2) = (stu-》grade2)+3.0;(stu-》grade3) = (stu-》grade3)+3.0;//下列fprintf函数,感觉这里这么写不对,该怎么样写??????lseek(fd, -sizeof(student), SEEK_CUR);write(fd, stu, sizeof(student));}}close(fd);} 方法就是:使用read每次读取一个student结构体,判断id是否相等,如果相等则重新赋值,文件偏移量后退sizeof(student)大小,写入新结构体即可。read读文件时,文件偏移是随时更新的,所以要从当前位置后退一个结构体大小。lseek的用法:
off_t lseek(int handle, off_t offset, int fromwhere);handel:文件描述符,open的返回值offset:偏移大小,正数向后偏移,负数向前偏移fromwhere:偏移的起始点,系统变量:SEEK_CUR(当前)、SEEK_SET(文件头)、SEEK_END(文件尾)当然用fseek也可以,这里我就不写了,对应的是:fopen、fread、fwrite、fseek
C语言中的read和write怎么用
1.纠正:read和write是UNIX或者一些类UNIX系统,比如LINUX系统中使用的,称为LINUX系统函数。这种函数只能在特定的操作系统下使用,可移植性差。fread和fwrite是C库函数。这种函数基本在任何操作系统都能使用,可移植性高。2.基础知识介绍只介绍LINUX系统函数,常用的有creat,open,close,read,write,lseek,access,一般用于文件编程3.如何使用谈到如何使用就必须说到另一个知识,文件描述符(filedescription),是一个非负数。函数原型:intread(intfd,constvoid*buf,size_t length)功能:从文件描述符fd所指向的文件中读取length个字节到buf所指向的缓存区中,返回值为实际读取的字节数intwrite(intfd,constvoid*buf,size_t length)功能:把length个字节从buf所指向的缓存区中写到件描述符fd所指向的文件中,返回值为实际写入的字节数例子:#defineLENGTH1024#define BUFFES_SIZE1024int n1,n2;intfd1,fd2;intbuffer;fd1=open("HEllo1.txt",O_RDWR|O_CREAT,O_IRUSE|O_IWUSR);fd2=open("HEllo2.txt",O_RDWR|O_CREAT,O_IRUSE|O_IWUSR);n1 =read(fd1,buffer, LENGTH);n2 =write(fd2,buffer, n1);好了累死了,答案完全原创,希望对你有帮助
如何用C语言读写文件
c语言读写文件程序:
#include "stdio.h"
#include 《stdlib.h》main()
{
FILE *fp1;//定义文件流指针,用于打开读取的文件
FILE *fp2;//定义文件流指针,用于打开写操作的文件
char text;//定义一个字符串数组,用于存储读取的字符
fp1 = fopen("d:\\a.txt","r");//只读方式打开文件a.txt
fp2 = fopen("d:\\b.txt","w");//写方式打开文件a.txt
while(fgets(text,1024,fp1)!=NULL)//逐行读取fp1所指向文件中的内容到text中
{
puts(text);//输出到屏幕
fputs(text,fp2);//将内容写到fp2所指向文件中
}
fclose(fp1);//关闭文件a.txt,有打开就要有关闭
fclose(fp2);//关闭文件b.txt
}
扩展资料:
C语言文件读写操作总结
一.非标准文件的读写 不带缓冲的
1.文件的打开和关闭
open()函数的作用是打开文件,其调用格式为: int open(char *filename, int access); 该函数表示按access的要求打开名为filename的文件,返回值为文件描述字,其中access有两部分内容: 基本模式和修饰符, 两者用" "("或")方式连接,修饰符可以有多个, 但基本模式只能有一个。
access的规定
O_RDONLY 只读
O_APPEND 文件指针指向末尾
O_WRONLY 只写
O_CREAT 文件不存在时创建文件, 属性按基本模式属性
O_RDWR 读写
O_BINARY 打开一个二进制文件
O_TEXT 打开一个文字文件
open()函数打开成功, 返回值就是文件描述字的值(非负值), 否则返回-1。 close()函数的作用是关闭由open()函数打开的文件, 其调用格式为: int close(int handle); 该函数关闭文件描述字handle相连的文件。
2.读写函数
int read(int handle, void *buf, int count);
read()函数从handle(文件描述字)相连的文件中, 读取count个字节放到buf所指的缓冲区中, 返回值为实际所读字节数, 返回-1表示出错。返回0 表示文件结束。
write()函数的调用格式为: int write(int handle, void *buf, int count); write()函数把count个字节从buf指向的缓冲区写入与handle相连的文件中, 返回值为实际写入的字节数。
3.随机定位函数
lseek()函数的调用格式为: int lseek(int handle, long offset, int fromwhere);
该函数对与handle相连的文件位置指针进行定位,功能和用法与fseek()函数相同。 tell()函数的调用格式为: long tell(int handle); 该函数返回与handle相连的文件现生位置指针, 功能和用法与ftell()相同
二、标准文件的读写
1.文件的打开函数fopen()
文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程序就可用此FILE指针来实现对指定文件的存取操作了。
当使用打开函数时,必须给出文件名、文件操作方式(读、写或读写),如果该文件名不存在,就意味着建立(只对写文件而言,对读文件则出错),并将文件指针指向文件开头。若已有一个同名文件存在,则删除该文件,若无同名文件,则建立该文件,并将文件指针指向文件开头。
fopen(char *filename,char *type);
其中*filename是要打开文件的文件名指针,一般用双引号括起来的文件名表示,也可使用双反斜杠隔开的路径名。
而*type参数表示了对打开文件的操作方式。其可采用的操作方式如下:
"r" 打开,只读; "w" 打开,文件指针指到头,只写; "a" 打开,指向文件尾,在已存在文件中追加; "rb" 打开一个二进制文件,只读; "wb" 打开一个二进制文件,只写; "ab" 打开一个二进制文件,进行追加 ;
"r+" 以读/写方式打开一个已存在的文件; "w+" 以读/写方式建立一个新的文本文件 ;"a+" 以读/写方式打开一个文件文件进行追加 ;"rb+" 以读/写方式打开一个二进制文件; "wb+" 以读/写方式建立一个新的二进制文件 ;
"ab+" 以读/写方式打开一个二进制文件进行追加 ;当用fopen()成功的打开一个文件时,该函数将返回一个FILE指针,如果文件打开失败,将返回一个NULL指针。
c语言实现文件内容某行删除
整体思路如下: 首先,找到找到要删除的那一行的行号,假如是j行,然后把指向文件的指针定位到j+1行处(可以使用fseek函数,Linux下可以使用lseek函数); 读取一行(此时的文件指针已到达改行的末尾处,也可以认为是到了下一行的开始处),再把文件指针定位到j行,把刚才读出的再写会,使用循环直至文件结束。 简单的说就是把后面的每一行一行一行的读出,再一行一行的写到前面一行。
更多文章:
google adsense申请(google adsense 申请问题)
2024年3月20日 22:15
变速齿轮手机版免root(有什么能给手游变速的软件吗实用的免root的)
2024年7月6日 15:52
百分网破解游戏下载(手机有没有什么破解游戏的网站,推荐一下,越多越好)
2024年5月16日 20:01
免费gif制作软件(有哪些好用的gif动图制作工具推荐满满的干货!)
2024年6月27日 05:33
网络游戏交易平台排行榜(求手游交易平台排行,有哪些比较推荐值得信赖的)
2024年8月9日 00:06
outlook邮箱下载(请问Microsoft Outlook邮箱的PC端在哪里可以下载呢(微软的outlook邮箱电脑端))
2024年4月10日 22:10