搜档网
当前位置:搜档网 › 文件输入输出操作

文件输入输出操作

文件输入输出操作
文件输入输出操作

C/C++文件输入输出操作——FILE*、fstream、windowsAPI

基于C的文件操作

在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。

一、流式文件操作

这种方式的文件操作有一个重要的结构FILE,FILE在头文件stdio.h中定义如下:

typedef struct {

int level; /* fill/empty level of buffer */

unsigned flags; /* File status flags */

char fd; /* File descriptor */

unsigned char hold; /* Ungetc char if no buffer */

int bsize; /* Buffer size */

unsigned char _FAR *buffer; /* Data transfer buffer */

unsigned char _FAR *curp; /* Current active pointer */

unsigned istemp; /* Temporary file indicator */

short token; /* Used for validity checking */

} FILE; /* This is the FILE object */

FILE这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来进行,此种文件操作常用的函数见下表函数功能

fopen() 打开流

fclose() 关闭流

fputc() 写一个字符到流中

fgetc() 从流中读一个字符

fseek() 在流中定位到指定的字符

fputs() 写字符串到流

fgets() 从流中读一行或指定个字符

fprintf() 按格式输出到流

fscanf() 从流中按格式读取

feof() 到达文件尾时返回真值

ferror() 发生错误时返回其值

rewind() 复位文件定位器到文件开始处

remove() 删除文件

fread() 从流中读指定个数的字符

fwrite() 向流中写指定个数的字符

tmpfile() 生成一个临时文件流

tmpnam() 生成一个唯一的文件名

下面就介绍一下这些函数

1.fopen()

fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen 实现三个功能

为使用而打开一个流

把一个文件和此流相连接

给此流返回一个FILR指针

参数filename指向要打开的文件名,mode表示打开状态的字符串,其取值如下表

字符串含义

r 打开只读文件,该文件必须存在。

r+ 打开可读写的文件,该文件必须存在。

rb+ 读写打开一个二进制文件,只允许读写数据。

rt+ 读写打开一个文本文件,允许读和写。

w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。(原来的EOF符不保留)

wb 只写打开或新建一个二进制文件;只允许写数据。

wb+ 读写打开或建立一个二进制文件,允许读和写。

wt+ 读写打开或着建立一个文本文件;允许读写。

at+ 读写打开一个文本文件,允许读或在文本末追加数据。

ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。

一个文件可以以文本模式或二进制模式打开,这两种的区别是:在文本模式中回车被当成一个字符'\n',而二进制模式认为它是两个字符0x0D, 0x0A;如果在文件中读到0x1B,文本模式会认为这是文件结束符,也就是二进制模型不会对文件进行处理,而文本方式会按一定的方式对数据作相应的转换。

系统默认的是以文本模式打开,可以修改全部变量_fmode的值来修改这个设置,例如_fmode=O_TEXT;就设置默认打开方式为文本模式;而_fmode=O_BINARY;则设置默认打开方式是二进制模式。

此函数返回一个FILE指针,所以申明一个FILE指针后不用初始化,而是用fopen()来返回一个指针并与一个特定的文件相连,如果成败,返回NULL。

例:

FILE *fp;

if(fp=fopen("123.456","wb"))

puts("打开文件成功");

else

puts("打开文件成败");

2.fclose()

fclose()的功能就是关闭用fopen()打开的文件,其原型是:int fclose(FILE *fp);如果成功,返回0,失败返回EOF。

在程序结束时一定要记得关闭打开的文件,不然可能会造成数据丢失的情况,我以前就经常犯这样的毛病。

例:fclose(fp);

3.fputc()

向流写一个字符,原型是int fputc(int c, FILE *stream); 成功返回这个字符,失败返回EOF。

例:fputc('X',fp);

4.fgetc()

从流中读一个字符,原型是int fputc(FILE *stream); 成功返回这个字符,失败返回EOF。

例:char ch1=fgetc(fp);

5. fseek()

此函数一般用于二进制模式打开的文件中,功能是定位到流中指定的位置,原型是int fseek(FILE *stream, long offset, int whence);如果成功返回0,参数offset是移动的字符数,whence是移动的基准,取值是

符号常量值基准位置

SEEK_SET 0 文件开头

SEEK_CUR 1 当前读写的位置

SEEK_END 2 文件尾部

例:fseek(fp,1234L,SEEK_CUR);//把读写位置从当前位置向后移动1234字节(L 后缀表示长整数)

fseek(fp,0L,2);//把读写位置移动到文件尾

6.fputs()

写一个字符串到流中,原型int fputs(const char *s, FILE *stream);

例:fputs("I Love You",fp);

7.fgets()

从流中读一行或指定个字符,原型是char *fgets(char *s, int n, FILE *stream); 从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。

例:如果一个文件的当前位置的文本如下

Love ,I Have

But ........

如果用

fgets(str1,4,file1);

则执行后str1="Lov",读取了4-1=3个字符,而如果用

fgets(str1,23,file1);

则执行str="Love ,I Have",读取了一行(不包括行尾的'\n')。

8.fprintf()

按格式输入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, ...]);其用法和printf()相同,不过不是写到控制台,而是写到流罢了

例:fprintf(fp,"%2d%s",4,"Hahaha");

9.fscanf()

从流中按格式读取,其原型是int fscanf(FILE *stream, const char *format[, address, ...]);其用法和scanf()相同,不过不是从控制台读取,而是从流读取罢了。

例:fscanf(fp,"%d%d" ,&x,&y);

10.feof()

检测是否已到文件尾,是返回真,否则返回0,其原型是int feof(FILE *stream);

例:if(feof(fp))printf("已到文件尾");

11.ferror()

原型是int ferror(FILE *stream);返回流最近的错误代码,可用clearerr()来清除它,clearerr()的原型是void clearerr(FILE *stream);

例:printf("%d",ferror(fp));

12.rewind()

把当前的读写位置回到文件开始,原型是void rewind(FILE *stream);其实本函数相当于fseek(fp,0L,SEEK_SET);

例:rewind(fp);

13.remove()

删除文件,原型是int remove(const char *filename); 参数就是要删除的文件名,成功返回0。

例:remove("c:\\io.sys");

14.fread()

从流中读指定个数的字符,原型是size_t fread(void *ptr, size_t size, size_t n, FILE *stream);参数ptr是保存读取的数据,void*的指针可用任何类型的指针来替换,如char*、int *等等来替换;size是每块的字节数;n是读取的块数,如果成功,返回实际读取的块数(不是字节数),本函数一般用于二进制模式打开的文件中。

例:

char x[4230];

FILE *file1=fopen("c:\\msdos.sys","r");

fread(x,200,12 ,file1);//共读取200*12=2400个字节

15.fwrite()

与fread对应,向流中写指定的数据,原型是size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);参数ptr是要写入的数据指针,void*的指针可用任何类型的指针来替换,如char*、int *等等来替换;size是每块的字节数;n是要写的块数,如果成功,返回实际写入的块数(不是字节数),本函数一般用于二进制模式打开的文件中。

例:

char x[]="I Love You";

fwire(x, 6,12,fp);//写入6*12=72字节

将把"I Love"写到流fp中12次,共72字节

16.tmpfile()

其原型是FILE *tmpfile(void); 生成一个临时文件,以"w+b"的模式打开,并返回这个临时流的指针,如果失败返回NULL。在程序结束时,这个文件会被自动删除。

例:FILE *fp=tmpfile();

17.tmpnam();

其原型为char *tmpnam(char *s); 生成一个唯一的文件名,其实tmpfile()就调用了此函数,参数s用来保存得到的文件名,并返回这个指针,如果失败,返回NULL。

例:tmpnam(str1);

二、直接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 [, unsigned mode]); 参数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[200];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);

-------------------------------------------------------------------------------------------------------------------------------------------------------------

同流式文件操作相同,这种也提供了Unicode字符操作的函数,如_wopen()等等,用于9X/NT下的宽字符编程,有兴趣可自已查询BCB的帮助。

另外,此种操作还有lock(),unlock(),locking()等用于多用户操作的函数,但在BCB中用得并不多,我就不介绍了,但如果要用C来写CGI,这些就必要的常识了,如果你有这方面的要求,那就得自已好好看帮助了。

-----------------------------------------------------------------------------------------------------------------------------------------------------------

基于C++的文件操作

在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:

1、插入器(<<)

向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。

2、析取器(>>)

从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x 的类型)的数据。

在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。下面就把此类的文件操作过程一一道来。

一、打开文件

在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:

void open(const char* filename,int openmode,int access);

参数:

filename:要打开的文件名

mode:要打开文件的方式

access:打开文件的属性

打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:

ios::app:以追加的方式打开文件

ios::ate:文件打开后定位到文件尾,ios:app就包含有此属性

ios::binary:以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文

ios::in:文件以输入方式打开(文件=>程序)

ios::out:文件以输出方式打开(程序=>文件)

ios::nocreate:不建立文件,所以文件不存在时打开失败

ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败

ios::trunc:如果文件存在,把文件长度设为0

可以用“或”把以上属性连接起来,如ios::out|ios::binary

打开文件的属性取值是:

0:普通文件,打开访问

1:只读文件

2:隐含文件

4:系统文件

可以用“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件。

例如:以二进制输入方式打开文件c:\config.sys

fstream file1;

file1.open("c:\\config.sys",ios::binary|ios::in,0);

如果open函数只有文件名一个参数,则是以读/写普通文件打开,即:

file1.open("c:\\config.sys");<=>file1.open("c:\\config.sys",ios::in|i os::out,0);

另外,fstream还有和open()一样的构造函数,对于上例,在定义的时侯就可以打开文件了:

fstream file1("c:\\config.sys");

特别提出的是,fstream有两个子类:ifstream(input file stream)和ofstream(outpu file stream),ifstream默认以输入方式打开文件(文件=>程序),而ofstream默认以输出方式打开文件。

ifstream file2("c:\\pdos.def");//以输入方式打开文件

ofstream file3("c:\\x.123");//以输出方式打开文件

所以,在实际应用中,根据需要的不同,选择不同的类来定义:如果想以输入方式打开,就用ifstream来定义;如果想以输出方式打开,就用ofstream来定义;如果想以输入/输出方式来打开,就用fstream来定义。

二、关闭文件

打开的文件使用完成后一定要关闭,fstream提供了成员函数close()来完成此操作,如:file1.close();就把file1相连的文件关闭。

三、读写文件

读写文件分为文本文件和二进制文件的读取,对于文本文件的读取比较简单,用插入器和析取器就可以了;而对于二进制的读取就要复杂些,下要就详细的介绍这两种方式

1、文本文件的读写

文本文件的读写很简单:用插入器(<<)向文件输出;用析取器(>>)从文件输入。假设file1是以输入方式打开,file2以输出打开。示例如下:

file2<<"I Love You";//向文件写入字符串"I Love You"

int i;

file1>>i;//从文件输入一个整数值。

这种方式还有一种简单的格式化能力,比如可以指定输出为16进制等等,具体的格式有以下一些

操纵符功能输入/输出

dec 格式化为十进制数值数据输入和输出

endl 输出一个换行符并刷新此流输出

ends 输出一个空字符输出

hex 格式化为十六进制数值数据输入和输出

oct 格式化为八进制数值数据输入和输出

setpxecision(int p) 设置浮点数的精度位数输出

比如要把123当作十六进制输出:file1<<<123;要把3.1415926以5位精度输出:file1<<<3.1415926。

2、二进制文件的读写

①put()

put()函数向流写入一个字符,其原型是ofstream &put(char ch),使用也比较简单,如file1.put('c');就是向流写一个字符'c'。

②get()

get()函数比较灵活,有3种常用的重载形式:

一种就是和put()对应的形式:ifstream &get(char &ch);功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符。如file2.get(x);表示从文件中读取一个字符,并把读取的字符保存在x中。

另一种重载形式的原型是: int get();这种形式是从流中返回一个字符,如果到达文件尾,返回EOF,如x=file2.get();和上例功能是一样的。

还有一种形式的原型是:ifstream &get(char *buf,int num,char delim='\n');这种形式把字符读入由 buf 指向的数组,直到读入了 num 个字符或遇到了由delim 指定的字符,如果没使用 delim 这个参数,将使用缺省值换行符'\n'。例如:

file2.get(str1,127,'A');//从文件中读取字符到字符串str1,当遇到字符'A'或读取了127个字符时终止。

③读写数据块

要读写二进制数据块,使用成员函数read()和write()成员函数,它们原型如下:

read(unsigned char *buf,int num);

write(const unsigned char *buf,int num);

read()从文件中读取 num 个字符到 buf 指向的缓存中,如果在还未读入 num 个字符时就到了文件尾,可以用成员函数 int gcount();来取得实际读取的字符数;而 write() 从buf 指向的缓存写 num 个字符到文件中,值得注意的是缓存的类型是 unsigned char *,有时可能需要类型转换。

例:

unsigned char str1[]="I Love You";

int n[5];

ifstream in("xxx.xxx");

ofstream out("yyy.yyy");

out.write(str1,strlen(str1));//把字符串str1全部写到yyy.yyy中

in.read((unsigned char*)n,sizeof(n));//从xxx.xxx中读取指定个整数,注意类型转换

in.close();out.close();

四、检测EOF

成员函数eof()用来检测是否到达文件尾,如果到达文件尾返回非0值,否则返回0。原型是int eof();

例:if(in.eof())ShowMessage("已经到达文件尾!");

五、文件定位

和C的文件操作方式不同的是,C++ I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是 seekg()和 seekp(),seekg()是设置读位置,seekp是设置写位置。它们最通用的形式如下:

istream &seekg(streamoff offset,seek_dir origin);

ostream &seekp(streamoff offset,seek_dir origin);

streamoff定义于 iostream.h 中,定义有偏移量 offset 所能取得的最大值,seek_dir 表示移动的基准位置,是一个有以下值的枚举:

ios::beg:文件开头

ios::cur:文件当前位置

ios::end:文件结尾

这两个函数一般用于二进制文件,因为文本文件会因为系统对字符的解释而可能与预想的值不同。

例:

file1.seekg(1234,ios::cur);//把文件的读指针从当前位置向后移1234个字节file2.seekp(1234,ios::beg);//把文件的写指针从文件开头向后移1234个字节

-------------------------------------------------------------------------------------------------------------------------------------------------------------

基于WINAPI的文件操作

WINAPI提供了两种文件操作函数,一组是为了和16位程序兼容,这种函数比较简单;而另一种是专门为32位程序设计,在使用时就显得麻烦些,下面我就把这两组函数一一介绍:

一、和16位程序兼容的一组函数

⑴_lopen

原型:HFILE _lopen(

LPCSTR lpPathName, // 文件名

int iReadWrite //文件存取方式

);

功能:打开文件,成功返回其句柄,与此类似的还有个OpenFile()函数,可自行查阅帮助文件。

参数说明:lpPathName是要打开的文件名,iReadWrite是文件存取方式,主要有3种方式:

OF_READ:以只读方式打开

OF_READWRITE:以读写方式打开

OF_WRITE:以只写方式打开

还有如 OF_SHARE_COMPAT 等属性,由于不太常用,为里就不一一介绍了。

⑵_lclose()

原型:HFILE _lclose( HFILE hFile);

功能:关闭文件,成功返回0

参数说明:hFile:要关闭的句柄

⑶_lread()

原型:UINT _lread( HFILE hFile, // 文件句柄

LPVOID lpBuffer, // 保存数据的缓冲区

UINT uBytes // 要读取的长度

);

功能:读文件,返回实际读取的字符数,与此类似的还有个_hread()函数,可自行查阅帮助文件。

⑷_lwrite()

原型:UINT _lwrite( HFILE hFile, // 文件句柄

LPCSTR lpBuffer, // 保存数据的缓冲区

UINT uBytes // 要写的长度

);

功能:写文件,返回实际写的字符数,与此类似的还有个_hwrite()函数,可自行查阅帮助文件。

⑸_llseek()

原型:LONG _llseek( HFILE hFile, // 文件句柄

LONG lOffset, // 移动的量

int iOrigin // 移动的基准位置

);

功能:移动文件的读写位置,成功返回移动后的文件读写位置

参数说明:iOrigin的取值是以下三种情况之一:

FILE_BEGIN:文件头部

FILE_CURRENT:文件当前位置

FILE_END:文件尾部

⑹_lcreat()

原型:HFILE _lcreat( LPCSTR lpPathName, //要创建的文件名

int iAttribute // 文件属性

);

功能:创建文件,成功返回其句柄

参数说明:文件属性是以下值的和:

0:普通文件

1:只读文件

2:隐含文件

4:系统文件

这几个函数的用法和所列的BCB库函数差不多,建议使用BCB的库函数。可参阅前文基于BCB库函数的文件操作。

二、32位程序兼容

CreateFile

打开文件

要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。

ReadFile

从文件中读取字节信息。

在打开文件获得了文件句柄之后,则可以通过该函数读取数据。

WriteFile

向文件写入字节信息。

同样可以将文件句柄传给该函数,从而实现对文件数据的写入。

CloseHandle

关闭文件句柄。

打开门之后,自然要记得关上。

GetFileTime

获取文件时间。

有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。

该函数同样需要文件句柄作为入口参数。

GetFileSize

获取文件大小。

由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。该函数同样需要文件句柄作为入口参数。

GetFileAttributes

获取文件属性。

可以获取文件的存档、只读、系统、隐藏等属性。

该函数只需一个文件路径作为参数。

SetFileAttributes

设置文件属性。

能获取,自然也应该能设置。

可以设置文件的存档、只读、系统、隐藏等属性。

该函数只需一个文件路径作为参数。

GetFileInformationByHandle

获取所有文件信息

该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。

该函数需要文件句柄作为入口参数。

GetFullPathName

获取文件路径,该函数获取文件的完整路径名。

需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。

CopyFile

复制文件

注意:只能复制文件,而不能复制目录

MoveFileEx

移动文件

既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)

DeleteFile

删除文件

GetTempPath

获取Windows临时目录路径

在Windows临时目录路径下创建一个唯一的临时文件

SetFilePoint

移动文件指针。

该函数用于对文件进行高级读写操作时。

文件的锁定和解锁

LockFile

UnlockFile

LockFileEx

UnlockFileEx

以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。

文件的压缩和解压缩

LZOpenFile

打开压缩文件以读取

LZSeek

查找压缩文件中的一个位置

LZRead

读一个压缩文件

LZClose

关闭一个压缩文件

LZCopy

复制压缩文件并在处理过程中展开

GetExpandedName

从压缩文件中返回文件名称。

以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。

文件映像/映射

32位 API 提供一个称为文件映像/映射的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。

创建和命名映射

MapViewOfFile

把文件映射装载如内存

UnmapViewOfFile

释放视图并把变化写回文件

FlushViewOfFile

将视图的变化刷新写入磁盘

C++文件的输入输出(讲解非常清晰)

C++中的文件输入/输出(1) 原作:Ilia Yordanov, loobian@https://www.sodocs.net/doc/ac13479709.html, 简介 本教程将以C++最基本的文件I/O(输出/输出)开始。此后,我将从更深入的方面,为你展示一些技巧,并分析给出一些有用的函数。 你需要对C++有一个较好的理解,否则这个教程于你而言将是陌生而毫无用处。 你的第一个程序 首先我将给出一段代码,接着再逐行进行解释。我们的第一个程序将建立一个文件,并写入一些字符: #include void main() // 程序从这里开始运行 { ofstream SaveFile(“cpp-home.txt”); SaveFile << “Hello World, from https://www.sodocs.net/doc/ac13479709.html, and Loobian!”; SaveFile.close(); } 仅仅如此吗?没错!这个程序将在当前运行目录下建立一个名为 cpp-home.txt的文件,并向它写入“Hello World, from https://www.sodocs.net/doc/ac13479709.html, and Loobian!”。 下面给出各行的含义: #include ——你需要包含此文件以使用C++的文件输入/输出函数。注意:一旦包含了这个文件,你不再需要(为了使用cout/cin)包含iostream.h,因为fstream.h已经自动包含了它。 在这个头文件中声明了若干个类,包括ifstream,ofstream及fstream,它们都继承自istream和ostream类。 ofstream SaveFile(“cpp-home.txt”); 1)ofstream即“output file stream(输出文件流)”。它将建立一个句柄(handle),以便我们以后能以一个文件流的形式写入文件。 2)SaveFile ——这是文件句柄的名字,当然,你还可以换用任何一个你想要的名称。

操作系统文件管理实验报告

操作系统实验报告实验名称:文件管理 专业班级:网络工程1301 学号: 姓名: 2015 年6 月16 日

实验一文件管理 一、实验目的 文件管理是操作系统的一个非常重要的组成部分。学生应独立用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。 二、预备知识 1.VS2010的使用 2.C#的学习 3.文件主目录与子目录的理解 三、实验容与步骤 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。要求设计一个10 个用户的文件系统,每次用户可保存10 个文件,一次运行用户可以打开5 个文件。系统能够检查打入命令的正确性,出错时能显示出错原因。对文件必须设置保护措施,例如只能执行,允许读等。在每次打开文件时,根据本次打开的要求,在此设置保护级别,即有二级保护。文件的操作至少有Create、delete、open、close、read、write 等命令。 所编写的程序应采用二级文件目录,即设置主文件目录和用户文件目录。前者应包含文件主及它们的目录区指针;后者应给出每个文件占有的文件目录,即文件名,保护码,文件长度以及它们存放的位置等。另外为打开文件设置运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。 程序流程图:

逻辑设计: 使用线性数组表表示MFD,泛型数组表示UFD,每个元素包括用户ID、保存的文件数、再使用线性表表示文件信息,每个元素包括文件名,文件属性(保护码),文件的状态等信息。 物理设计: //主目录 private FileUser[] mfd; //当前用户 private FileUser currentuser; ///

/// 文件 /// public class FileObject { public string filename; public int size=20; public int read=0; public int write = 0; public string author; } /// /// 文件系统用户 /// public class FileUser { public string username;

C++输入输出流指令

补充知识1:C++中的标准输入/输出流指令 一.C++的输出 格式:cout<<表达式【<<表达式】 功能:将指定的数据流输出到屏幕 例:cout<<"Hello! \n " ; 注释1:可以输出任何类型的数据,且无须指定数据的类型 int a=5 ; float b=3.45 ; char c=’A’ ; printf ( "%d %f %c ",a,b,c) ; cout<>变量【>>变量】 功能:从键盘取得输入的数据流 例:int a; float b; scanf ( "%d %f",&a,&b) ; cin >> a>> b ; cin>>a,b ;× 可以从键盘输入: 20 31.45 各数据项间以空格分开 三.C++输入输出语句的特点 ●简洁:不需要指定数据的类型; ●需要头文件iostream.h,在程序的首行用# include命令将该文件“包含”进源程 序。

例1.4:改写例1.3(P5)的程序 # include "iostream.h" // 文件包含命令 int max(int x, int y) // 定义max( )子函数,求两个数中的较大值{ int z; if (x>y) z=x; else z=y; return z; } void main( ) { int max(int x, int y); // 此语句可省略 int a,b,c; cin>>a>>b; // 从键盘输入两个数据送到变量a和b中 c=max(a,b); // 调用max( )函数比较a和b,并把结果赋给c cout<<"max="<

C语言中文件_数据的输入输出_读写

C语言中文件,数据的输入输出,读写. 文件是数据的集合体,对文件的处理过程就是对文件的读写过程,或输入输出过程。 所谓文件是指内存以外的媒体上以某种形式组织的一组相关数据的有序集合。文件分类: 顺序文件,随机文件。 文本文件和二进制文件。 文本文件也称为ASCII文件,在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。 文本文件可以在屏幕上按字符显示,源程序文件就是文本文件,由于是按字符显示,所以能读懂文件内容。 二进制文件是按二进制编码方式来存放的。这里主要讨论文件的打开,关闭,读,写,定位等操作。 文件的存取方法 C程序的输入输出(I/O)有两种方式:一种称为标准I/O或流式I/O,另一种称为低级I/O。流式I/O是依靠标准库函数中的输入输出函数实现的。低级I/O利用操作系统提供的接口函数(称为底层接口或系统调用)实现输入输出,低级I/O 主要提供系统软件使用。 在C语言中用一个FILE类型的指针变量指向一个文件,(FILE类型是系统在stdio.h中定义的描述已打开文件的一种结构类型),这个指针称为文件指针。FILE *指针变量标识符; 如 FILE *fp; 文件的打开与关闭 所谓打开文件,指的是建立文件的各种有关信息,并使文件指针指向该文件,以便对它进行操作。 关闭文件则是断开指针与文件之间的联系,也就禁止再对该文件进行操作。 1、fopen 函数原型:FILE *fopen(const char *filename,const char *mode); Fopen函数用来打开一个文件,前一部分用来说明文件路径及文件名,后一部分mode指出了打开文件的存取方式;返回值是被打开文件的FILE型指针,若打开失败,则返回NULL。打开文件的语法格式如下: 文件指针名=fopen(文件名,使用文件方式); 文件指针名必须被说明为FILE类型的指针变量。 FILE *fp; fp=fopen(“C:\\Windowss\\abc.txt”,”r”); 注意用两个反斜杠\\来表示目录间的间隔符。 存取文件的模式是一个字符串,可以由字母r,w,a,t,b及+组合而成,各字符的含

实验四 Linux输入输出管理

实验四、Linux输入输出管理 一、实验目的 通过实验理解Linux的标准输入输出设备,了解Linux的窗口管理器,体验Linux系统下的USB 存储设备管理,掌握Linux的输入输出重定向和管道操作。 二、实验内容与步骤 预习背景知识,理清相关概念。 1、熟悉GNOME 开机启动,登录Red Hat Linux系统; GNOME桌面最强大的功能就是能够自由配置,并且执行任务有多种方式。GNOME桌面的组件可共同使用。通常,可以用几种不同的方式执行相同的操作。例如,既可以从面板启动应用程序,也可以从菜单或桌面启动应用程序。 GNOME桌面包含专用的首选项工具。每一个工具控制GNOME桌面行为的一个特定部分。要启动首选项工具,请从“主菜单”中选择“首选项”。从子菜单中选择要配置的项目。 在GNOME环境中执行下面的步骤。 (1)练习使用GNOME面板 GNOME面板左下方有若干个图标。移动鼠标光标停留在这些图标上一到两秒钟, 可看到关于它们的操作提示。请将观察结果记录在表4-1中。 (2)显示面板主菜单 GNOME面板左端有一个带箭头的主菜单按钮。单击并记录主菜单标题,填入表4-2。 (3)打开和最小化/最大化一个视窗 单击面板上的文字处理器图标,打开一个文字处理视窗。在打开文字处理视窗之后,可以单击右上角的按钮选择最小化、最大化或者还原。 (4)改变视窗的大小 把鼠标光标移动到视窗的任何一边,可以看到一个箭头标志。当该标志出现的时候按下鼠标左键不放,然后拖动视窗的边界可以迸行缩放。 (5)移动视窗 单击视窗的标题栏保持不放。拖动视窗到一个新的位置。 (6)处理重叠视窗 在文字处理视窗打开的情况下,打开新的视窗会重叠或者覆盖住文字处理视窗。新打开的视窗现在成为前端视窗或者说是当前进程。为了把文字处理视窗从底层带到顶层来,可单击能够看见的视窗的任何部分。如果看不到,则可单击前面视窗的左上角符号,打开“窗口菜单”,从中选择需要的视窗。 (7)关闭视窗 单击视窗右上角“关闭窗口”按钮,可关闭当前视窗。 (8)处理工作区按钮 ●在工作空间1~4中分别打开不同的任务视窗。 ●单击各个工作区按钮,在4个视窗中切换。 ●关闭每一个视窗中正在运行的应用程序。 2、加载USB存储设备 USB存储设备可以通过终端命令加载。 (1)插人USB存储设备,稍过片刻,打开终端,输入: [root@localhost ~] # fdisk -1

输入输出文件

OUTPUT: **************************************************** * USAF STABILITY AND CONTROL DIGITAL DATCOM * * PROGRAM REV. JAN 96 DIRECT INQUIRIES TO: * * WRIGHT LABORATORY (WL/FIGC) ATTN: W. BLAKE * * WRIGHT PATTERSON AFB, OHIO 45433 * * PHONE (513) 255-6764, FAX (513) 258-4054 * **************************************************** 1 CONERR - INPUT ERROR CHECKING 0 ERROR CODES - N* DENOTES THE NUMBER OF OCCURENCES OF EACH ERROR 0 A - UNKNOWN VARIABLE NAME 0 B - MISSING EQUAL SIGN FOLLOWING VARIABLE NAME 0 C - NON-ARRAY VARIABLE HAS AN ARRAY ELEMENT DESIGNATION - (N) 0 D - NON-ARRAY VARIABLE HAS MULTIPLE VALUES ASSIGNED 0 E - ASSIGNED VALUES EXCEED ARRAY DIMENSION 0 F - SYNTAX ERROR 0****************************** INPUT DATA CARDS ****************************** $FLTCON NMACH=1.0,MACH(1)=.60, NALPHA=9.0, ALSCHD(1)=-2.0,0.0,2.0,4.0,8.0, 12.0,16.0,20.0,24.0, RNNUB(1)=2.28E6$ $OPTINS SREF=2.25, CBARR=0.822, BLREF=3.0$ $SYNTHS XCG=2.60, ZCG=0.0, XW=1.70, ZW=0.0, ALIW=0.0, XH=3.93, ZH=0.0, ALIH=0.0, XV=3.34, VERTUP=.TRUE.$ $BODY NX=10., X(1)=0.0, 0.175, 0.322, 0.530, 0.85, 1.46, 2.50, 3.43, 3.97, 4.57, R(1)=0.0, 0.0417, 0.0833, 0.125, 0.1665, 0.208, 0.208, 0.208, 0.178, 0.138$ $WGPLNF CHRDTP=0.346, SSPNE=1.29, SSPN=1.50, CHRDR=1.16, SAVSI=45.0, CHSTAT=0.25, SWAFP=0.0, TWISTA=0.0, SSPNDD=0.0, DHDADI=0.0, DHDADO=0.0, TYPE=1.0$ $WGSCHR TOVC=0.060, DELTAY=1.30, XOVC=0.40, CLI=0.0, ALPHAI=0.0, CLALPA(1)=0.131, CLMAX(1)=0.82, CMO=0.0, LERI=0.0025, CLAMO=0.105$ $WGSCHR CLMAXL=0.78$ $VTPLNF CHRDTP=0.420, SSPNE=0.63, SSPN=0.849, CHRDR=1.02, SAVSI=28.1, CHSTAT=0.25, SWAFP=0.0, TWISTA=0.0, TYPE=1.0$ $VTSCHR TOVC=0.09, XOVC=0.40, CLALPA(1)=0.141, LERI=0.0075$ $HTPLNF CHRDTP=0.253, SSPNE=0.52, SSPN=0.67, CHRDR=0.42, SAVSI=45.0, CHSTAT=0.25, SWAFP=0.0, TWISTA=0.0, SSPNDD=0.0, DHDADI=0.0, DHDADO=0.0, TYPE=1.0$ $HTSCHR TOVC=0.060, DELTAY=1.30, XOVC=0.40, CLI=0.0, ALPHAI=0.0,

输入输出作业

1.选择题 (1)下列指令中,格式合法的是()。 A. IN AL, 60H B. IN AL, 100H C. OUT AL, DX D. IN AL, [DX] (2)8254计数器电路中,GATE=1表示()。 A. 允许计数器计数 B. 禁止计数器计数 C. 计数器计数结束 D. 不管有无CLK信号,OUT端均会有规律发生电平信号变换 (3)若8254定时/计数器的某个计数器初始化编程为二进制计数方式,则该计数器计数初值最大为()。 A. 9999H B. 0000H C. FFFFH D. FFH (4)存储器直接存取方式的英文缩写是()。 A. DMA B. IDE C. Cache D. I/O (5)执行IN AL,DX指令后,进入AL寄存器的数据来自()。 A.CPU的寄存器 B.存储器 C.立即数 D.端口 (6)一个端口可有()个I/O地址。 A. 1 B. 2 C. 256 D. 不一定 (7)8254内部独立的16位计数器通道有()个。 A. 1 B. 2 C. 3 D. 4 (8)CPU不参与数据传送的是()方式。 A. 查询输入/输出 B. 无条件输入/输出 C. 中断输入/输出 D. 直接存储器存取 (9)为解决高速主机和低速外设在速度方面的矛盾,I/O接口电路中一般都设置()。 A. 口地址译码电路 B. 缓冲器或锁存器 C. 中断控制电路 D. 读/写控制逻辑 (10)CPU与外设间数据传送的控制方式有()。 A. 中断方式 B. 程序控制方式 C. DMA方式 D. 以上三种都是 (11)在以下方式中,CPU不占用总线的方式是()方式。 A. 无条件 B. 查询 C. 中断 D. DMA (12)8254内部有3个()位的计数器。 A. 1 B. 8 C. 16 D. 32 (13)利用8254每20ms产生一次中断,若CLK为2MHZ,则工作方式和计数初值分别是()。 A. 方式2;65536 B. 方式3;65536 C. 方式2;40000 D. 方式3;40000H (14)下面关于输入/输出端口的描述中,不正确的是()。 A. 按端口寄存器存放信息的物理意义来分,端口分为:数据、状态和控制端口。 B. 数据输出端口和控制端口必须有不同的端口地址。 C. 数据输入端口和状态端口必须有不同的端口地址。 D. 数据输入端口和数据输出端口必须有不同的端口地址。 (15)可编程定时/计数器8254内部每个计数器允许的最高计数频率是()。 A. 2MHz B. 10MHz C. 20MHz D. 100MHz (16)下列各部分中,一般不与系统总线直接相连的是()。

2-管理Linux文件系统(操作命令)-NEW

管理Linux文件系统【知识目标】 了解Linux文件系统的概念; 掌握常用的文件系统管理命令的使用方法; 掌握修改文件权限的方法; 掌握vi编辑器的使用方法; 【技能目标】 会使用文件系统管理命令; 会进行文件压缩和归档; 能浏览文件和目录; 能操作文件和目录; 能设置文件和目录的权限; 能使用vi编辑器编辑文件;

【Linux文件系统】 根目录:/ 目录结构:树状 绝对路径:/usr/local/bin/ 相对路径:./local/bin/(当前目录-/usr)【Linux系统默认目录】

【Linux文件类型】 普通文件:数据;文本文件、二进制文件; 目录文件: 设备文件:I/O设备文件;符号文件、块文件; 链接文件:指针访问;符号链接文件; 管道文件:进程间传递数据;一端写入,一端读取;FIFO 文件; 【Linux文件权限】 Ls –l:-、d、l、b、c、s、p; rwx rwx rwx:用户权限、用户组权限、其他用户权限;读、写、执行; 权限代码:---(000->0)——rwx(111->7) r--? rw-?r-x?

【目录与文件操作命令】 1、目录浏览 当前路径 ls ls:文件与子目录清单 ls –a:隐藏文件; ls –A:隐藏文件;不显示“.”、“..”; ls –c:修改时间排序;最近修改最前; ls –C:多列显示; ls –d:对于目录文件,只显示文件名称; ls –l:文件、子目录详细信息; 2、文件浏览

cat cat:显示文件内容,;适合单屏文件; cat –b:非空行标注行号; cat –n:所有行标注行号;

Linux必学的60个命令二(文件处理命令)

Linux必学的60个命令-文件操作 Linux 系统信息存放在文件里,文件与普通的公务文件类似。每个文件都有自己的名字、内容、存放地址及其它一些管理信息,如文件的用户、文件的大小等。文件可以是一封信、一个通讯录,或者是程序的源语句、程序的数据,甚至可以包括可执行的程序和其它非正文内容。Linux文件系统具有良好的结构,系统提供了很多文件处理程序。这里主要介绍常用的文件处理命令。 file 1.作用件内容判断文件类型,使用权限是所有用户。 2.格式 file通过探测文 file [options] 文件名 3.[options]主要参数 -v:在标准输出后显示版本信息,并且退出。 -z:探测压缩过的文件类型。 -L:允许符合连接。 -f name:从文件namefile中读取要分析的文件名列表。 4.简单说明 使用file命令可以知道某个文件究竟是二进制(ELF格式)的可执行文件, 还是Shell Script 文件,或者是其它的什么格式。file能识别的文件类型有目录、Shell脚本、英文文本、二进制可执行文件、C语言源文件、文本文件、DOS的可执行文件。 5.应用实例 如果我们看到一个没有后缀的文件grap,可以使用下面命令: $ file grap grap:English text 此时系统显示这是一个英文文本文件。需要说明的是,file命令不能探测包括图形、音频、视频等多媒体文件类型。 mkdir 1.作用 mkdir命令的作用是建立名称为dirname的子目录,与MS DOS下的md命令类似,它的使用权限是所有用户。 2.格式 mkdir [options] 目录名 3.[options]主要参数 -m, --mode=模式:设定权限<模式>,与chmod类似。 -p, --parents:需要时创建上层目录;如果目录早已存在,则不当作错误。 -v, --verbose:每次创建新目录都显示信息。 --version:显示版本信息后离开。 4.应用实例 在进行目录创建时可以设置目录的权限,此时使用的参数是“-m”。假设要创建的目录名是“tsk”,让所有用户都有rwx(即读、写、执行的权限),那么可以使用以下命令: $ mkdir -m 777 tsk

作业━━第 9 章(2)━━文件输入输出流

文件输入输出流 【学习要点】 1.掌握文件流类体系的组成和应用。 2.掌握文件的使用方法━━定义文件流、打开文件、读/写操作、关闭文件 3.掌握文本文件的使用━━>> 、<< 、get()、getline()、put() 4.掌握二进制文件的使用━━read()、write() 5.掌握文件的随机访问━━seekg()、tellg()、seekp()、tellp() 6.掌握文件与对象━━在构造函数中通过磁盘数据文件来初始化新建立的对象 ━━在析构函数中将对象中的数据保存在磁盘数据文件 ------------------------------------------------------------------------------------------------------------------------------------------------【例题分析】 1.下面程序的运行结束后,显示器上输出结果是______,数据文件data.dat中保存的结果是______。 #include void main( ) { ofstream outf ("data.dat") ; for ( int i=10;i<20;i++) if (i%3==0) cout< #include void main() { char c, *str="You are a student!" ; fstream inout ( "mydata.dat", ios::in|ios::out|ios::binary ) ; if ( !inout ) { cout<<"文件打开出错!\n"; exit(1); } inout<

CISCO文件管理命令

和Windows或Linux操作系统一样,CiscoIOS也有自己管理文件的命令,这和DOS/Windows的命令很类似。这些命令所管理和维护的文件包括IOS路由器操作系统文件,配置文件或者其它类型的IOS文件。对于任何Cisco管理员来说,知道这些命令都是必须的。 接下来就让我们看看十条必须知道的CiscoIOS文件管理命令。 #1dir 这条指令用来显示文件夹下的文件列表,输入dir?可以查看可选参数。如下所示: /allListallfiles /recursiveListfilesrecursively all-filesystemsListfilesonallfilesystems archive:Directoryorfilename cns:Directoryorfilename flash:Directoryorfilename null:Directoryorfilename nvram:Directoryorfilename system:Directoryorfilename

tar:Directoryorfilename tmpsys:Directoryorfilename xmodem:Directoryorfilename ymodem:Directoryorfilename Router# 以上每一种文件系统(比如flash,nvram等带冒号的)都相当于DOS系统里的磁盘分区,你需要在其名称后面加冒号。默认情况下,dir会列出路由器flash 中的文件,因为默认的当前路径就是flash: Router#dir Directoryofflash:/ 2-rwx18929780Aug29200615:49:57+00:00c870-advipservicesk9-mz.124 -15.T5.bin 3-rwx2143Aug29200616:42:14+00:00running-config 23482368bytestotal(4544512bytesfree) Router#

lammps输入文件命令中文详解

作者: 御剑江湖收录日期: 2011-03-31 发布 日期: 2011-03-24 Commands 描述了lammps输入文件的格式和在定义lammps模拟所需要的命令. 1.1 LAMMPS input script 我们用lammps做分子动力学模拟, 需要一个输入文件. lammps在执行计算的时候, 从这个文本文件中逐行读入命令. 大多数情况, lammps输入文件中各个命令的顺序并不是很重要. 但是你要注意以下

几点: (1) lammps并不是将你的输入文件全部读入之后才开始进行计算的, 或者说, 每条命令在它被读入之后就会起作用了. 注意, 下面两组命令的执行效果是不相同的. timestep 0.5 run 100 run 100 和 run 100 timestep 0.5

run 100 (2) 有些命令只有在另一些命令已经被定义的情况下才有效. 例如如果你要设定一组原子的温度, 那么用group命令定义哪些原子属于这个组才行. (3) 还有一种情况就是: 命令B要用到命A 设置的一些数值, 这样你也不能颠倒这两个命令的顺序. 每个命令的详细介绍中的Restrictions部分会说明要使用该命令定义的时候哪些命令必须要被预先定义. 如果你的输入文件书写的格式有问题,

lammps在执行的时候会提示ERROR或者WARNING , 出现类似信息时, 你可以到手册的第九章中查询原因. 1.2 Parsing rules 输入文件中的每一非空行都被认为是一条命令. lammps中命令的书写是对大小写敏感的, 不过一般的命令和参数都是小写的, 大写字母用于极少数的情况. (1) 命令行后的& 表示这一行跟下一行是同一条命令. 这一点跟FORTRAN很像. (2) 命令行最开始的# 表示这一行在执行

对文件的输入与输出

对文件的输入与输出 10.1 C文件的有关基本知识 什么是文件: 文件有不同的类型,在程序设计中,主要用到两种文件: (1)程序文件。包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为.exe)等。 (2)数据文件。文件的内容不是程序,而是供程序运行时读写的数据,如在程序运行过程中输出到磁盘(或其他外部设备)的数据,或在程序中供读入的数据。 操作系统把各种设备都统一作为文件来处理。 所谓“文件”一般指存储在外部介质上数据的集合。 输入输出是数据传送的过程,称为流(stream),即数据流。 C语言把文件看作是一个字符(或字节)的序列,即由一个一个字符(或字节)的数据顺序组成。 文件名: 一个文件要有一个唯一的文件标识,以便用户识别和引用。 文件标识包括3部分: 1.文件路径 2.文件名主干 3.文件后缀 如下: D:\CC\temp\ file.dat 文件路径文件名主干文件后缀 文件名主干的命名规则遵循标识符的命名规则。 文件的分类: 根据数据的组织形式,数据文件可分为ASCII文件和二进制文件。

ASCII文件又称文本文件(text file),每一个字节放一个字符的ASCII代码。 ANSI C标准采用“缓冲文件系统”处理数据文件,所谓缓冲文件系统是指系统自动地在内存区为程序中第一个正在使用的文件开辟一个文件缓冲区。 定义一个指向文件类型数据的指针变量: FILE *fp; 定义fp是一个指向FILE类型数据的指针变量。可以使fp指向某一个文件的文件信息区(是一个结构体变量),通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它相关联的文件。 注意:指向文件的指针变量并不是指向外部介质上的数据文件的开头,而是指向内存中的文件信息区的开头。 10.2 打开与关闭文件 所谓“打开”是指为文件建立相应的信息区(用来存放有关文件的信息)和文件缓冲区(用来暂时存放输入输出的数据)。 用fopen函数打开数据文件: ANSI C规定了用标准输入输出函数fopen来实现打开文件。fopen函数的调用格式: fopen(文件名,使用文件方式); 例如: fopen(“a1”,”r”); 用fclose函数关闭数据文件: “关闭”就是撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其相联系的文件进行读写操作,除非再次打开,使该指针变量重新指向该文件。 关闭文件用fclose函数。fclose函数调用的一般形式: fclose(文件指针);

C语言作业

C语言作业 输入n ,输出如下例(n=3 )所示的边长为n 的菱形: * *** ***** *** * 输入:边长n 输出:边长为n 的菱形 测试输入期待的输出时间限制内存限制 额外进程

输入图形的高n 和首字符c ,输出如下例(c='A' ,n=5 )所示的图形 . ABCDE BCDEF CDEFG DEFGH EFGHI 输入:高n 和首字符c 输出:高为n 和首字符为c 的平行四边形 测试输入期待的输出时间限制内存限制 额外进程 输入整数m 和正整数n ,按下列公式计算s :s=m-(m+1)+m+2-(m+3)+ …… +(-1)n(m+n) 。输入:m 和n 输出:s

测试输入期待的输出时间限制内存限制 额外进程 从键盘上输入一个字符,进行加密以后再输出在屏幕上。加密规律是: 输入小写英文字母时,输入a 输出Z、输入b输出Y、输入c输出X、...、输入z输出A。输入大写英文字母时,将该字母ASCII码值再加上该值的1/2后输出所对应的字符,例如数字A的ASCII码值是65,加上其值的1/2后是98(小数四舍五入),则输出字符…b?。 输入数字时,将该数字原ASCII码值再加上该值十进制的十位上的数后输出,例如数字9 的ASCII码值是57,加上十位上的数5后是62,则输出字符…>?。 输入其他字符时原样输出。 友情提示:整数之间运算的结果要取整,例如5/2的结果是2,而5.0/2.0对小数四舍五入的结果就是3.0了。所以输入大写英文字母时的输出要仔细考虑。 测试输入期待的输出 时间限制内存限制额外进程

背景: 钟面上的时针和分针之间的夹角总是在0 度~ 359 度之间。举例来说,在十二点的时候两针之间的夹角为0 度,而在六点的时候夹角为180 度,在三点的时候为90 度。本题要解决的是计算12:00 到11:59 之间任意一个时间的夹角。 输入: 每组测试数据包含两个数字:第一个数字代表小时( 大于等于0 小于等于12) ,第二个数字代表分( 在区间[0, 59] 上) 。 输出: 对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。输出格式如下所示。 输入:12 30 输出:At 12:30 the angle is 165.0 degrees. 友情提示:以表中心到12点的连线为基准,分针每走1分钟是6度,时针与基准的夹角每个小时也是30度,从整点开始,每过1分钟时针再增加0.5度。 测试输入期待的输出时 间 限 制 内存 限制 额 外 进 程

linux 实验报告 文件系统与文件管理

学生课程实验报告书课程:《linux网络操作系统》 级系 专业班 学号: 姓名: 指导教师:

一、实验项目:用户与组群管理 二、实验日期: 三、实验原理: 1.熟悉Linux下常用的操作指令。 2.加深对文件,目录,文件系统等概念的理解。 3.掌握Linux文件系统的目录结构。 4.掌握有关Linux文件系统操作的常用命令。 5.了解有关文件安全方面的知识。 四、实验仪器: PC机 Redhat网络操作系统 五、实验步骤(纸张不够写可另外加纸并应装订): 进入虚拟机,并在此平台上练习文件管理有关命令.一般在[root @ localhost xxxx]$ 提示符下键入有关命令。 1.浏览文件系统 〈1〉运行pwd命令,确定你当前的工作目录。 〈2〉利用以下命令显示当前工作目录的内容:(理解各字段彻底意义。) 〈3〉运行以下命令:(反馈信息中.代表本身目录,..代表其父目录;选项a可以显示隐藏文件;选项i 可以显示文件的I节点号) ls –ai 〈4〉使用mkdir命令建立一个子目录subdir,并用ls查看当前目录。 〈5〉使用带-d选项的ls命令,你只能看到有关子目录的信息(.表示本身目录)。

〈6〉使用cd命令,将工作目录改到根目录(/)上。 ①用相对路径将工作目录改到根目录。 ②用绝对路径将工作目录改到根目录。 〈7〉使用ls命令列出根目录的内容,再分别列出各子目录的内容,体会各目录作用及访问权限。 〈8〉使用ls-l命令列出/dev的内容。 Ls –l /dev 列出/dev目录的内容,文件太多显示多屏,各行第一个字符为b的表示块特别文件;各行第一个字符为c的表示字符特别文件。 〈9〉使用不带参数的命令cd,然后用pwd命令确定你当前的工作目录是什麽。 〈10〉使用命令cd ../..,你将工作目录移到什麽地方? 2.查看你的文件 〈1〉利用cd命令,将工作目录改到你的主目录上。 〈2〉将工作目录改到你的子目录subdir,然后运行命令: date > file1 将当前日期和时间存放到新建文件file1中。 Ls –l 反馈信息中有新文件 file1。请注意并记下文件长度为:

实验3' 输入输出

第四周作业 1. 若有以下变量声明: char ch=’e’; int a=3,b=12345; unsigned c=65534; long d=123456; float e=3.12; double f=5.6789; 如果想要得到以下的输出结果,请写出相应的程序。(凵表示空格,程序保存为3b_1.c) ch=’e’凵or凵101(ASCII) a=凵凵凵凵凵3凵b=012345 c=65534;c=fffe;c=FFFE %d=123456% e=3.120000\f=5.678900 e=3.1凵凵凵凵凵f=5.7凵凵凵凵凵 2. 使用下面程序来输入数据,要使x=5,u=40000,t=65537,ch1=’m’,ch2=’n’,a=-12 3.456,b=123456.789。请写出正确的键盘输入形式,并自行添加输出语句验证。(凵表示空格,将程序正确运行时键盘需要输入的所有内容保存为3b_2.txt)#include int main(void) { int x; unsigned u; long t; char ch1,ch2; float a; double b; scanf(“%d%u”,&x,&u);

scanf(“凵t=%lx”,&t); scanf(“凵%c%c”,&ch1,&ch2); /* 第一个%前有一个空格*/ scanf(“凵a=%e,b=%lf”,&a,&b); } 3. 假设现有的变量类型与上题一样,所有的变量也想获得同样的值。实际的键盘输入形式如下,请写出相应的scanf语句。(凵表示空格, ?表示Enter键,程序保存为3b_3.c)5凵凵凵40000? 65537? m凵n? -123.456,b=123456.789? 4.编写求梯形面积的程序,数据由键盘输入(程序保存为3b_4.c)。 5.输入两个复数,输出其和(程序保存为3b_5.c) 假设有两个复数a+bi 和c+di,则他们的和为(a+c)+(b+d)i。 要求程序的输入输出格式如下所示: Please input complex number one /* 提示输入第一个复数*/ realpart: 2 /* 输入实部*/ imagpart: -3 /* 输入虚部*/ Please input complex number two /* 提示输入第一个复数*/ realpart: 1 /* 输入实部*/ imagpart: 5 /* 输入虚部*/ (2-3i)+(1+5i) = 3+2i /* 最终结果输出*/ 6.从键盘输入一个大写字母,要求改用小写字母输出(程序保存为3b_6.c)。

CISCO文件管理命令

和Windows或 Linux操作系统一样,Cisco IOS 也有自己管理文件的命令,这和DOS/Windows的命令很类似。这些命令所管理和维护的文件包括IOS 路由器操作系统文件,配置文件或者其它类型的IOS 文件。对于任何Cisco管理员来说,知道这些命令都是必须的。 接下来就让我们看看十条必须知道的Cisco IOS 文件管理命令。 #1 dir 这条指令用来显示文件夹下的文件列表,输入dir ? 可以查看可选参数。如下所示: /all List all files /recursive List files recursively all-filesystems List files on all filesystems archive: Directory or file name cns: Directory or file name flash: Directory or file name null: Directory or file name nvram: Directory or file name system: Directory or file name tar: Directory or file name tmpsys: Directory or file name xmodem: Directory or file name ymodem: Directory or file name Router# 以上每一种文件系统(比如flash,nvram等带冒号的)都相当于 DOS系统里的磁盘分区,你需要在其名称后面加冒号。默认情况下,dir会列出路由器flash 中的文件,因为默认的当前路径就是flash:

文件输入输出流

C++中的文件输入/输出收藏 简介 本教程将以C++最基本的文件I/O(输出/输出)开始。此后,我将从更深入的方面,为你展示一些技巧,并分析给出一些有用的函数。 你需要对C++有一个较好的理解,否则这个教程于你而言将是陌生而毫无用处。 你的第一个程序 首先我将给出一段代码,接着再逐行进行解释。我们的第一个程序将建立一个文件,并写入一些字符: #include void main() //程序从这里开始运行 { ofstream SaveFile(“cpp-home.txt”); SaveFile << “Hello World, from https://www.sodocs.net/doc/ac13479709.html, and Loobian!”; SaveFile.close(); } 仅仅如此吗?没错!这个程序将在当前运行目录下建立一个名为cpp-home.txt的文件,并向它写入“Hello World, from https://www.sodocs.net/doc/ac13479709.html, and Loobian!”。 下面给出各行的含义: #include ——你需要包含此文件以使用C++的文件输入/输出函数。注意:一旦包含了这个文件,你不再需要(为了使用cout/cin)包含iostream.h,因为fstream.h已经自动包含了它。 在这个头文件中声明了若干个类,包括ifstream,ofstream及fstream,它们都继承自istream 和ostream类。 ofstream SaveFile(“cpp-home.txt”); 1)ofstream即“output file stream(输出文件流)”。它将建立一个句柄(handle),以便我们以后能以一个文件流的形式写入文件。 2)SaveFile——这是文件句柄的名字,当然,你还可以换用任何一个你想要的名称。 3)(“cpp-home.txt”); ——打开名为cpp-home.txt的文件。如果程序运行的当前目录已经存在这样一个文件,则它将被替换掉;万一不存在,程序也会为你创建一个为文件,你不必为此而担心。 现在,让我们稍微深入一点点。首先,我要指出的是:ofstream是一个类。因此ofstream SaveFile(“cpp-home.txt”);这一语句将创建一个该类的对象;而我们在括号中所传递的参数实际上将传给构造函数:在这里我们将我们要建立的文件的名称作为实际参数传递给了该类的构造函数。当然,我们还可以传递其它的一些信息,不过我以后再对其进行讲解。 SaveFile << “Hello World, from https://www.sodocs.net/doc/ac13479709.html, and Loobian!”;——“<<”看起来是不是很亲切?不错,想必你已经在cout << 中见到过。这是一个预定义好的运算符。不管怎么

相关主题