㈠ 如何用fopen打開文件,並將其內容讀入整形數組
所有計算機里的數據都是2進制的,只是你看到的是他的不同種形式,你所謂的16進制數據也是用那個u什麼32的工具打開的,那個工具打開的就是以16進制打開的,比如說cc,那就是8位2進制的16進制形式,那是一個位元組,一個位元組8位2進制,2位16進制,int 型兩位元組,long 4,double 8,這些都是最基本的,不要以為數據類型這些基本的東西沒用,有時候他們比演算法更重要,所謂不積跬步無以至千里就是這個意思。
㈡ C語言用fscanf()函數如何讀取文件全部內容
void read_txt(const char* Input, const char* Output){
FILE *fin = fopen(Input, "rb");//以二進制讀入
FILE *fout = fopen(Output, "w");
unsigned char ch1,ch2;
while(fscanf(fin, "%c%c", &ch1,ch2) != EOF){//直到文件結束
fprintf(fout, "%d%d", ch1,ch2);//以10進制輸出
}
}
int main(){
read_txt("D:/IN.txt","D:/OUT.txt");//txt文件目錄
return 0;
}
註:判斷文件結束處的語句:fscanf(fin, "%c%c", &ch1,ch2)。其中兩個%c之間不能加空格,否則讀到的二進制文件會不完整,比源文件少好多個位元組
㈢ c語言讀取txt文件內容
用C語言從txt文件中讀取數據,可以使用C標准庫文件自帶的文件介面函數進行操作。
一、打開文件:
FILE *fopen(const char *filename, const char *mode);
因為txt文件為文本文件, 所以打開時選擇的mode應為"r"或者"rt"。
二、讀取文件:
讀取文件應根據文件內容的格式,以及程序要求,選擇讀取文件的函數。可以使用一種,也可以幾種混用。 常用的文件讀取函數如下:
1、fgetc, 從文件中讀取一個位元組並返回。 適用於逐個位元組讀取。
2、 fgets, 從文件中讀取一行。適用於整行讀取。
3、fscanf, 格式化讀取文件, 在已經清楚文件存儲格式下,可以直接用fscanf把文件數據讀取到對應類型的變數中。
4、fread, 整塊讀取文件, 對於txt文件比較少用。
三、關閉文件:
讀取結束後,應調用fclose函數關閉文件。
㈣ C語言中讀入一個.txt 的文件,是不是fopen時就已經將內容全部讀入內存了
fopen()函數主要做是:
1. 建立一個FILE對象。
2. 根據路徑在外存中找到描述文件的對象,並根據所找到的對象的信息初始化FILE對象。
3. 返回FILE對象的指針。
從上可知,調用fopen()函數時,並未將文件的內容讀到內存中,而是在文件系統中找到描述該文件的對象,並建立描述該文件的FILE對象。
㈤ c++中fopen函數讀文件怎麼用文件數據
本文分別簡單講述了如何利用C和C++庫函數對文件的讀寫,涵蓋了常用的文件操作函數。網上關於C/C++文件操作的介紹的博客很多,所以本文也大同小異,也主要是做一個備忘,不有每次都網路了。但本文重點在於幾個庫函數的運用,而不是從文件的屬性或分類開始。x0dx0a一、C文件操作:x0dx0a C語言中,文件的操作都是通過一個FILE類型的文件指針進行,也就是說只有通過文件指針,才能調用相應的文件。FILE是一個由系統定義的結構體(定義在stdio.h中),可以存放文件的相關信息。x0dx0a文件的打開(fopen函數)x0dx0a 文件的操作過程一般為:打開 => 讀/寫 => 關閉。x0dx0afopen函數的原型如下:x0dx0a FILE* fopen(const char* filename, const char* mode); x0dx0a函數調用就比較簡單了:x0dx0a FILE* fp;x0dx0a fp = fopen("file1.txt", "r");x0dx0a如果打開成功,返回file1.txt文件的指針,如果打開失敗,返回一個NULL指針,所以調用fopen()後我們需要檢查fp的值才進行下一步操作。fopen()的第一個參數為文件名,第二個參數為文件打開方式,含義如下表:x0dx0a說明: 1. 使用"r"時,如果文件不存在,則出錯。x0dx0a 2. 使用"w"時,如果沒有文件,則創建一個新文件。x0dx0a 3. 使用"a"時,如果希望向文件尾添加數據,則該文件必須存在,否則出錯。x0dx0a 4. "r+","w+","a+"都是可以輸入和輸出數據,但必須遵守上述3點x0dx0a 5. 操作二進制文件時,加上"b"字元,且二進制文件對換行符不會進行轉換,而文本文件會將換行符轉換為回車和換行兩個字元。x0dx0a文件的關閉(fclose函數)x0dx0a 在使用完一個文件後,若不關閉則會造成系統資源泄漏。使用fclose()關閉文件即可,原型為 int fclose(FILE* fp)。使用:fclose(fp); flose()返回0時為順利關閉文件,否則返回EOF(-1)。x0dx0a文件的讀寫x0dx0a 1) fputc(), fgetc()分別為從文件流中寫和讀一個字元,原型分別如下:x0dx0a 寫:int fputc(int c, FILE* fp); 讀:int fgetc(FILE* fp); 失敗時均返回EOFx0dx0a 2) fputs(), fgets()分別為從文件流中寫和讀一個字元串,原型分別如下:x0dx0a 寫:int fputs(const char* str, FILE* fp); 例如: fputs("I love this game!", fp);x0dx0a 讀:char* fgets(char* str, int n, FILE* fp); 從流中讀取n-1個字元或讀完一行,參數str用於接收讀取的字元串。注意當讀取一行時,不包括行尾的'\n'字元。x0dx0a 3) fseek() 一般用於二進制模式打開的文件中,功能是定位到流中指定的位置。原型如下:x0dx0a int fseek(FILE* fp, lont offset, int whence); 參數offset是移動的字元數,whence是移動的基準,取值是:x0dx0a SEEK_SET 0 //文件開頭 x0dx0a SEEK_CUR 1 //當前讀寫的位置 x0dx0a SEEK_END 2 //文件尾部 x0dx0a 4) fprintf(),fscanf()是將數據按格式輸出輸入到文件流中,用法類似printf()和scanf()。原型分別如下:x0dx0a int fprintf(FILE* fp, const char* format, ...); 它與printf()不同的就是將數據寫到了文件流中,而不是控制台罷了。x0dx0a int fscanf(FILE* fp, cosnt char* format, ...); 從文件流中按格式讀取,與scanf()不同的就是數據是從文件流中讀取而已。x0dx0a 例如: fprintf(fp, "count=%d", 5); fscanf(fp, "%d", &x);x0dx0a 5) feof()是檢測是否已到文件尾,是返回真,否則返回0,原型是 int feof(FILE* fp);x0dx0a 6) rewind() 則是把當前的讀寫位置回到文件開始,相當於 fseek(fp, 0L, SEEK_SET); 原型: void rewind(FILE* fp);x0dx0a 7) remove() 刪除文件,原型: int remove(const char* filename); 參數為要刪除的文件名,成功則返回0;x0dx0a 8) fread(), fwrite() 它們相當於可將一塊的數據讀出或寫入,相當的方便。原型如下:x0dx0a size_t fread(void* ptr, size_t size, size_t n, FILE* fp); 從流中讀指定個數的字元,size是每塊的位元組婁,n則是讀取的塊數。x0dx0a size_t fwrite(const void* ptr, size_t size, size_t n, FILE* fp); 類似的是向文件流中寫入n塊size位元組數的數據。可以看到數據指針為void*型,即可以使用任何類型的指針來替換。例如:x0dx0a現在一個結構體: struct student_t{char name[16]; int id; int age;}; 創建三個學生的數據並賦值:struct student_t stu[3];x0dx0a這時,當我們找開文件後(一般是進制模式),可以調用fwrite()將三個學生的數據都寫入到文件中,兩種方式:x0dx0a for(int i = 0; i < 3; ++i)x0dx0a fwrite(&stu[i], sizeof(struct student_t), 1, fp); x0dx0a 或者:fwrite(stu, sizeof(struct student_t), 3, fp);x0dx0a些時,我們調用fread()函數便可很輕松的將剛才寫入的3個學生的數據讀取出來:x0dx0a struct student_t stus[3];x0dx0a for(int i = 0; i < 3; ++i)x0dx0a fread(&stus[i], sizeof(struct student_t), 1, fp);x0dx0a 或者:fread(stus, sizeof(struct student_t), 3, fp); 這樣便可將三個學生的數據讀入到stus變數中了(有木有很方便吶)x0dx0a注意:如果你發現使用fread()讀取之後,最後一個學生讀取的數據不完全,可能是由於你沒有使用二進制模式打開的原因。x0dx0a 9) 最後是tmpfile()和tmpnam(),前者為生成一個臨時文件,後者為生成一個唯一的文件名,具體使用在此不介紹了。x0dx0a二、使用C++中的fstream文件流操作類進行文件的讀寫x0dx0a 使用fstream操作文件與使用C庫函數類似,只不過fstream為面向對象方式,或多了上些C++的特性。首先,這里大概有三個流:x0dx0afstream為文件輸入輸出流,ifstream為輸入文件流,ofstream為輸出文件流,它們與ostream不同的就流的目的地為文件,而不是控制台。這里只介紹與上述的一些不同點:x0dx0a 1. 打開文件,如可以是 ifstream input_file("file2.txt"); 這樣將會以默認方式打開file2.txt文件並進行讀取。也可使用open()方式打開一個文件,並指定打開方式,例如:x0dx0a ifstream input_file;x0dx0a input_file.open("file2.txt", ios::binary); x0dx0a打開後,可以使用is_open()檢測是否打開成功:x0dx0a if(input_file.is_open()){},然後可以使用流操作符向文件寫數據了,例如:x0dx0a input_file << "this is a test line";x0dx0a input_file << "another info";x0dx0a另外,這里的文件打開方式在ios空間下:x0dx0a ios::app 添加到文件尾x0dx0a ios::ate 把文件標志放在末尾而非起始。x0dx0a ios::trunc 默認. 截斷並覆寫文件。x0dx0a ios::nocreate 文件不存在也不創建。x0dx0a ios::noreplace 文件存在則失敗。x0dx0aofstream使用方式類似,讀取一行數據可以使用getline(buf, count), 類型於fgets()。fstream類還提供一個很多其它方法,如fclose()為關閉文件,eof()用於檢測狀態是否已經到了文件末尾。x0dx0a這里還有兩個類似於上述的fread()和fwrite()函數,是read(), write(),功能和用法類似類似,例如:x0dx0a output_file.write((const char*)stu, 3 * sizeof(struct student_t));x0dx0a input_file.read((char*)stus, 3 * sizeof(struct student_t));x0dx0a注意,這里也需要使用二進制模式打開,否則read的時候最後的上些數據讀不完全。調用上面兩個函數後可以使用bad()來檢測文件流對象是否錯誤,例如,if(input_file.bad()){printf("error when read file\n"); return;},最後input_file.close()即可。x0dx0a 最後,C/C++文件的操作並不復雜,多使用幾次便可熟練掌握,需要注意的就是文件的打開方式,和當用同一個文件指針進行又讀又寫時,注意文件指針位置的移動。
㈥ 用fopen打開的文件
fopen(打開文件)
相關函數 open,fclose
表頭文件 #include<stdio.h>
定義函數 FILE * fopen(const char * path,const char * mode);
函數說明 參數path字元串包含欲打開的文件路徑及文件名,參數mode字元串則代表著流形態。
mode有下列幾種形態字元串:
r 打開只讀文件,該文件必須存在。
r+ 打開可讀寫的文件,該文件必須存在。
rb+ 讀寫打開一個二進制文件,只允許讀寫數據。
rt+ 讀寫打開一個文本文件,允許讀和寫。
w 打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。
a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。
wb 只寫打開或新建一個二進制文件;只允許寫數據。
wb+ 讀寫打開或建立一個二進制文件,允許讀和寫。
wt+ 讀寫打開或著建立一個文本文件;允許讀寫。
at+ 讀寫打開一個文本文件,允許讀或在文本末追加數據。
ab+ 讀寫打開一個二進制文件,允許讀或在文件末追加數據。
上述的形態字元串都可以再加一個b字元,如rb、w+b或ab+等組合,加入b 字元用來告訴函數庫打開的文件為二進制文件,而非純文字文件。不過在POSIX系統,包含Linux都會忽略該字元。由fopen()所建立的新文件會具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)許可權,此文件許可權也會參考umask 值。
返回值
文件順利打開後,指向該流的文件指針就會被返回。若果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。
附加說明
一般而言,開文件後會作一些文件讀取或寫入的動作,若開文件失敗,接下來的讀寫動作也無法順利進行,所以在fopen()後請作錯誤判斷及處理。
【常式】
#include <stdio.h>
int main()
{
FILE *fp; //fp 是一個指向FILE 類型結構體的指針變數
fp = fopen("myfile.ly","w");
if(fp==NULL)
{
printf("\n文件打開失敗!\n");
exit(0);
}
fclose(fp);
return 0;
}
//這個仁兄給的例子不知道在說什麼...
#include <stdlib.h>
#include <stdio.h>
#include <dir.h>
int main(void)
{
char *s;
char drive[MAXDRIVE];
char dir[MAXDIR];
char file[MAXFILE];
char ext[MAXEXT];
int flags;
s=getenv("COMSPEC"); /* get the comspec environment parameter */
flags=fnsplit(s,drive,dir,file,ext);
printf("Command processor info:\n");
if(flags & DRIVE)
printf("\tdrive: %s\n",drive);
if(flags & DIRECTORY)
printf("\tdirectory: %s\n",dir);
if(flags & FILENAME)
printf("\tfile: %s\n",file);
if(flags & EXTENSION)
printf("\textension: %s\n",ext);
return 0;
}
㈦ C語言 文件操作,要讀取一個txt文件內容
//data.txt文件內容如下
1 個 豬內
2 個 豬
3 個 豬
4 個 豬
5 個 豬
6 個 豬
7 個 豬
8 個 豬
//運行結果容一
the 8 line :8 個 豬
Press any key to continue
//運行結果二
out of range!
Press any key to continue
//代碼如下
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main(void)
{
int lid,cnt=0,flag=0;;
char buf[100]="\0";
FILE *fp;
srand((unsigned)time(NULL));
fp=fopen("data.txt","r");
lid= rand()%10+1;
while (fgets(buf,99,fp)!=NULL)
{
if(cnt==lid)
{
printf("the %d line :%s\n",lid+1,buf);
flag=1;
break;
}
cnt++;
}
if (flag==0)
{
printf("out of range!\n");
}
}
㈧ C語言怎樣將文本文件中的內容讀取列印
可以參考下面的代碼:
#include<stdio.h>
#define F_PATH "d:\myfile\file.dat"
char c;
int main(){
FILE*fp=NULL;//需要注意
fp=fopen(F_PATH,"r");
if(NULL==fp) return -1;//要返回錯誤代碼
while(fscanf(fp,"%c",&c)!=EOF) printf("%c",c); //從文本中讀入並在控制台列印出來
fclose(fp);
fp=NULL;//需要指向空,否則會指向原打開文件地址
return 0;
}
(8)fopen讀取文件內容擴展閱讀:
fopen函數是打開一個文件,其調用的一般形式為:
文件指針名=fopen(文件名,使用文件方式);
「文件指針名」必須是被聲明為FILE 類型的指針變數;
「文件名」是被打開文件的文件名;
「使用文件方式」是指文件的類型和操作要求;
「文件名」是C風格字元串。
使用文件的方式共有12種,部分的意義如下:
"r" = "rt"
打開一個文本文件,文件必須存在,只允許讀
"rb"
打開一個二進制文件,文件必須存在,只允許讀
㈨ C語言讀取文件內容,按行讀
C語言逐行讀取文件內容 ,參考代碼如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#defineMAX_LINE1024
intmain()
{
charbuf[MAX_LINE];/*緩沖區*/
FILE*fp;/*文件指針*/
intlen;/*行字元個版數*/
if((fp=fopen("test.txt","r"))==NULL)
{
perror("failtoread");
exit(1);
}
while(fgets(buf,MAX_LINE,fp)!權=NULL)
{
len=strlen(buf);
buf[len-1]='