#include<iostream>
#include<fstream>
using namespace std;
int main()
{
int i,index,lines;
char buffer[1024];
char FileName[256];
cout<<"pleast input filename";
cin>>FileName;
ifstream infile(FileName,ios::in);
if(infile.fail())
{
cout<<"打開文件<<FileName<<"失敗"<<endl;
cin.get();
cin.get();
return -1;
}
lines=0;
while(lines<10&&infile.geline(buffer,1024))
{
cout<<buffer;
lines++;
}
cin.get();
cin.get();
return 1;
}
c++文件操作:
#include<stdio.h>
typedefstruct {
int level;/* fill/empty level of buffer */
unsigned flags; /* File status flags */charfd;/* File descriptor */
unsigned charhold;/* Ungetc char if no buffer */intbsize;/* Buffer size */
unsigned char_FAR *buffer;/* Data transfer buffer */
unsigned char_FAR *curp;/* Current active pointer */
unsigned istemp; /* Temporary file indicator */shorttoken;/* Used for validity checking */
} FILE;
fopen() 打開流?
fclose() 關(guān)閉流?
fputc() 寫一個(gè)字符到流中?
fgetc() 從流中讀一個(gè)字符?
fseek() 在流中定位到指定的字符?
fputs() 寫字符串到流?
fgets() 從流中讀一行或指定個(gè)字符?
fprintf() 按格式輸出到流?
fscanf() 從流中按格式讀取?
feof() 到達(dá)文件尾時(shí)返回真值?
ferror() 發(fā)生錯(cuò)誤時(shí)返回其值?
rewind() 復(fù)位文件定位器到文件開始處?
remove() 刪除文件?
fread() 從流中讀指定個(gè)數(shù)的字符?
fwrite() 向流中寫指定個(gè)數(shù)的字符?
tmpfile() 生成一個(gè)臨時(shí)文件流?
tmpnam() 生成一個(gè)唯一的文件名
___________________________________________________________________________________________
FILE *fp;
if(fp=fopen("123.456","wb");
puts("打開文件成功");
else
puts(打開文件失敗");
fclose(fp);
fclose()的功能就是關(guān)閉用fopen()打開的文件,其原型是:int fclose(FILE *fp);如果成功,返回0,失敗返回EOF凑队。
在程序結(jié)束時(shí)一定要記得關(guān)閉打開的文件查库,不然可能會造成數(shù)據(jù)丟失的情況哼审,我以前就經(jīng)常犯這樣的毛病狰右。
fputs()
從流中讀一個(gè)字符错敢,原型是int fputc(FILE,*stream);成功返回這個(gè)字符痊臭,失敗返回EOF踩萎。
char ch1=fgetc(fp);
fseek()
fseek(fp,1234l,SEEK_CUR);把讀寫位置從當(dāng)前位置向后移動1234字節(jié)(L后綴表示長整數(shù))
fseek(fp,0l,2);把讀寫位置移動到文件尾
fputs()
寫一個(gè)字符串到流中
fputs("I LOVE YOU",fp);
fgets();
從流中讀一行或者指定的字符停局。
例:如果一個(gè)文件的當(dāng)前位置的文本如下
Love ,I Have
But ........
如果用
fgets(str1,4,file1);
則執(zhí)行后str1="Lov",讀取了4-1=3個(gè)字符香府,而如果用
fgets(str1,23,file1);
則執(zhí)行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);返回流最近的錯(cuò)誤代碼诊胞,可用clearerr()來清除它,clearerr()的原型是void clearerr(FILE *stream);
例:printf("%d",ferror(fp));
rewind()
把當(dāng)前的讀寫位置回到文件開始锹杈,原型是void rewind(FILE *stream):其實(shí)本函數(shù)相當(dāng)于fseek(fp,0l,SEEK_SET);
remove()
刪除文件撵孤,原型是int remove(const char *filename):參數(shù)就是需要刪除的參數(shù)名;成功返回0竭望;
fread()
從流中讀指定的個(gè)數(shù)的字符邪码,原型就是 size_t fread(void *ptr,size_t size,size_t n,.FILE *stream);
char x[4230];?
FILE *file1=fopen("c://msdos.sys","r");?
fread(x,200,12 ,file1);//共讀取200*12=2400個(gè)字節(jié)
fwrite()
char x[]="i love you":
fwrite(x,6,12,fp):
將把"I Love"寫到流fp中12次,共72字節(jié)
16.tmpfile()?
其原型是FILE *tmpfile(void); 生成一個(gè)臨時(shí)文件咬清,以"w+b"的模式打開闭专,并返回這個(gè)臨時(shí)流的指針,如果失敗返回NULL枫振。在程序結(jié)束時(shí)喻圃,這個(gè)文件會被自動刪除。
例:FILE *fp=tmpfile();
17.tmpnam();?
其原型為char *tmpnam(char *s); 生成一個(gè)唯一的文件名粪滤,其實(shí)tmpfile()就調(diào)用了此函數(shù)斧拍,參數(shù)s用來保存得到的文件名,并返回這個(gè)指針杖小,如果失敗肆汹,返回NULL愚墓。
在c++中有一個(gè)fstream 類轉(zhuǎn)么用于文件操作
fstream file1:
file1.open("c://config.sys",ios::binary|ios::in);
fstream 有兩個(gè)子類,ifstream和ofstream
關(guān)閉文件則調(diào)用close函數(shù)就可以了昂勉。如file1.close();
讀寫數(shù)據(jù)塊:
unsigned char str1[]="I LOVE YOU ";
int n[5];
ifstream in("xxx,xxx");
ofstram out("yyy.yyy");
out.write(str1,strlen(str1));
in.read((unsign char*)n,sizeof(n));
in.close();
out.close();
檢測eof
if(in.eof())
5 文件定位?
file1.seekg(1234.ios::cur)//把文件的讀指針從當(dāng)前位置向后移1234個(gè)字節(jié)?
file2.seekp(1234,ios::beg);//把文件的寫指針從文件開頭向后移1234個(gè)字節(jié)
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
using namesapce std;
int main()
{
fstream f("file.txt");
vector<string> words;
string line;
while(getline(f,line))
{
words.push_back(line);
}
for(int i=0;i<words.size;i++)
{
cout<<words[i]<<endl;
}
return 0;
}