1. 程式人生 > >C++檔案操作函式詳解

C++檔案操作函式詳解

轉載:http://blog.csdn.net/mafuli007/article/details/7271975

C++通過以下幾個類支援檔案的輸入輸出

(1)      ofstream:寫操作,輸出檔案類;

(2)      ifstream:讀操作,輸入檔案類;

(3)      fstream:可同時讀寫的檔案類。

1.     open函式:開啟檔案

函式原型:void open(const char*filename,int mode,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:系統檔案 
例如:以二進位制輸入方式開啟檔案c:\config.sys 
  fstreamfile1; 
  file1.open("c:\\config.sys",ios::binary|ios::in,0); 

ofstream file;
file.open ("example.bin", ios::out |ios::app | ios::binary);

2.      close函式

函式原型:void close()

3. 二進位制檔案(Binary files)

在二進位制檔案中,使用<< 和>>,以及函式(如getline)來操作符輸入和輸出資料,沒有什麼實際意義,雖然它們是符合語法的。

檔案流包括兩個為順序讀寫資料特殊設計的成員函式:write 和 read。第一個函式 (write) 是ostream 的一個成員函式,都是被ofstream所繼承。而read 是istream 的一個成員函式,被ifstream 所繼承。類 fstream 的物件同時擁有這兩個函式。它們的原型是:

write ( char *buffer, streamsize size );
read ( char * buffer, streamsize size );

這裡 buffer 是一塊記憶體的地址,用來儲存或讀出資料。引數size 是一個整數值,表示要從快取(buffer)中讀出或寫入的字元數。

[cpp] view plain copy print?
  1. // reading binary file
  2.     #include <iostream>
  3.     #include <fstream.h>
  4.     constchar * filename = "example.txt";  
  5.     int main () {  
  6.         char * buffer;  
  7.         long size;  
  8.         ifstream file (filename, ios::in|ios::binary|ios::ate);  
  9.         size = file.tellg();  
  10.         file.seekg (0, ios::beg);  
  11.         buffer = newchar [size];  
  12.         file.read (buffer, size);  
  13.         file.close();  
  14.         cout << "the complete file is in a buffer";  
  15.         delete[] buffer;  
  16.         return 0;  
  17.     }  

寫檔案舉例:

[cpp] view plain copy print?
  1. // writing on a text file
  2. #include <fiostream.h>
  3. int main () {  
  4.     ofstream examplefile ("example.txt");  
  5.     if (examplefile.is_open()) {  
  6.         examplefile << "This is a line.\n";  
  7.         examplefile << "This is another line.\n";  
  8.         examplefile.close();  
  9.     }  
  10.     return 0;  
  11. }  

讀檔案舉例

[cpp] view plain copy print?
  1. // reading a text file
  2.    #include <iostream.h>
  3.    #include <fstream.h>
  4.    #include <stdlib.h>
  5.    int main () {  
  6.        char buffer[256];  
  7.        ifstream examplefile ("example.txt");  
  8.        if (! examplefile.is_open())  
  9.        { cout << "Error opening file"; exit (1); }  
  10.        while (! examplefile.eof() ) {  
  11.            examplefile.getline (buffer,100);  
  12.            cout << buffer << endl;  
  13.        }  
  14.        return 0;  
  15.    }  
  

C++操作檔案舉例

[cpp] view plain copy print?
  1. #include <fstream>
  2. #include <iostream>
  3. usingnamespace std;  
  4. int main()  
  5. {  
  6.         constint SZ=100;  
  7.         char buf[SZ];  
  8.         {  
  9.                ifstream in;  
  10.                in.open("example.cpp",ios::in);  
  11.                ofstream out;  
  12.                out.open("example.out");  
  13.                int j=1;  
  14.                while(in.get(buf,SZ))  
  15.                {  
  16.                        in.get();  
  17.                        cout<<buf<<endl;  
  18.                        out<<j++<<":"<<buf<<endl;  
  19.                }  
  20.         }  
  21.         ifstream in("example.out");  
  22.         while(in.getline(buf,SZ))  
  23.         {  
  24.                char *cp=buf;  
  25.                while(*cp!=':')  
  26.                {  
  27.                        ++cp;  
  28.                }  
  29.                cp+=2;  
  30.                cout<<cp<<endl;  
  31.         }  
  32.         system("pause");  
  33.         return 0;  
  34. }  

C++中提供了移動檔案指標的成員函式,從而對檔案的進行隨機地讀寫。類istream針對讀指標提供3個成員函式:

  tellg()//返回輸入檔案讀指標的當前位置;

  seekg(檔案中的位置)//將輸入檔案中的讀指標移動到指定位置

  seekg(位移量,參照位置)//以參照位置為基準移動若干位元組

其中參照位置是列舉值:

ios::beg//從檔案開頭計算要移動的位元組數

ios::cur//從檔案指標的當前位置計算要移動的位元組數

ios::end//從檔案的末尾計算要移動的位元組數

如果參照位置省略,則預設為beg。而類ostream針對寫指標提供的3個成員函式:

  tellp()//返回輸出檔案寫指標的當前位置;

  seekp(檔案中的位置)//將輸出檔案中的寫指標移動到指定位置

  seekp(位移量,參照位置)//以參照位置為基準移動若干位元組

複製程式碼
 1 
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int main()
{
	ifstream in;
in.open(url,ios::app| ios::binary);
if(!in.is_open())
{
cout<<"open file is failed";
return 1;
}
char* buffer = new char[100];
while(!in.eof())
{
in.read(buffer,10);// 讀完10個位元組到buffer中,檔案指標在第10個位元組;
in.seekg(1,ios::cur);// 移動一個位元組,從11個位元組讀取到buffer中;
}
in.close();
return 0;
}

相關推薦

C++檔案操作函式

轉載:http://blog.csdn.net/mafuli007/article/details/7271975 C++通過以下幾個類支援檔案的輸入輸出 (1)      ofstream:寫操作,輸出檔案類; (2)      ifstream:讀操作,輸入檔案

c語言檔案操作函式

C語言中沒有輸入輸出語句,所有的輸入輸出功能都用 ANSI C提供的一組標準庫函式來實現。檔案操作標準庫函式有:       檔案的開啟操作 fopen 開啟一個檔案       檔案的關閉操作 fclose 關閉一個檔案       檔案的讀寫操作 fgetc 從檔案中讀取一個字元            

LoadRunner檔案操作函式

涉及的函式彙總: 檔案的開啟操作 fopen 開啟一個檔案 檔案的關閉操作 fclose 關閉一個檔案 檔案的讀寫操作 fgetc 從檔案中讀取一個字元          fputc 寫一個字元到檔案中去      

Android NDK——必知必會之JNI的C++操作函式和小結(三)

引言 上一篇講解了一些關於JNI和NDK的必知必會的理論知識和機制,由於篇幅問題把關於JNI的重要的函式放到這篇,具體使用留到下一篇,此係列文章基連結: 一、JNI中的函式概述 在JNI層我們基本上都是通過env指標來呼叫jni.h標頭檔案裡定義的函式,JNI

C語言 把字串寫入檔案 fprintf函式

把把字串寫入檔案,基本示例如下: FILE *fp; char s[]= "hello world!"; char c = '\n'; fp = fopen("file.txt","a");

基於C++的circshift 函式

函式講解 circshift函式是matlab中表示迴圈移位的函式,呼叫形式如下:B= circshift(A,K,m); 輸入引數解釋如下: A表示待移位的向量或矩陣; K表示所移位數,可以是數字,也可以是二維陣列,若是數字則可以和m協同作用來決定是行移

unity 在移動平臺中,檔案操作路徑

相信大家在開發過程中,難免會儲存一些檔案在客戶端進行本地化操作。 如:配置檔案,狀態檔案,Assetbundle檔案等等... 最近總有人問我: 1.儲存了一個xml在客戶端,能讀取裡面的資料,可是不能修改,甚至一修改就報錯... 2.我在電腦上操作檔案(xm

C++ 檔案讀寫(七)(ofstream,ifstream,fstream)

void fileRead() { using namespace std; ifstream fin; /** qwer:asdf:zxc:1234: gfd:jkl:mnb: */ //開啟檔案 fi

c語言strtod()函式

前言 網上有很多關於strtod()函式的文章,不過大部分都是用strtod()函式轉換一個字元 char *str = "111.11"; char *target; double ret; ret = strtod(str, &target);

C++檔案操作函式-讀寫檔案

檔案讀寫是基礎中的基礎,關於此類知識的文章非常多,但還是想根據自己的使用心得去總結這麼一些內容。 1.檔案的開啟和關閉 開啟和關閉 fopen()函式 FILE *fopen(char *filename, *type); filename:可以包

C++中建構函式

                                        c++類的建構函式詳解                         一、 建構函式是幹什麼的 class Counter { public:          // 類Counter的建構函式          // 特點:

C++ 】 format 函式

Format是一個很常用,卻又似乎很煩的方法,以下是它的完整概貌,以供大家查詢之用:一、字串首先看它的宣告:function Format(const Format: string; const Args: array of const): string; overload;事實上Format方法有兩個種形式

C++檔案讀寫(ofstream,ifstream,fstream)

在看C++程式設計思想中,每個練習基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含義,在看了幾位大牛的博文後,進行整理和總結: 這裡主要是討論fstream的內容: #include <fstream> ofstrea

C++ 中malloc函式(轉載)

一、原型:extern void *malloc(unsigned int num_bytes); 標頭檔案:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 與 malloc.h

linux C —— 檔案操作函式

chmod int chmod(const char *path, mode_t mode) 將檔案read的檔案許可權變成所有者有讀寫許可權,其他使用者只有讀的許可權。這和shell指令中的chmod有相同的功效。 #include <stdi

linux C程式設計--popen函式

#include <stdio.h> FILE *popen(const char *command, const char *type); int pclose(FILE *stream); 描述 popen() 函式 用 建立管道 的 方式 啟動一個 程序, 並呼叫 shell. 因為 管道

c++檔案讀寫

引數path字串包含欲開啟的檔案路徑及檔名,引數mode字串則代表著流形態。mode有下列幾種形態字串:r 開啟只讀檔案,該檔案必須存在。r+ 開啟可讀寫的檔案,該檔案必須存在。w 開啟只寫檔案,若檔案存在則檔案長度清為0,即該檔案內容會消失。若檔案不存在則建立該檔案。w+ 開啟可讀寫檔案,若檔案存在則檔案長

C++ 檔案讀寫(ofstream,ifstream,fstream)

文章轉自:http://blog.csdn.net/kingstar158/article/details/6859379 這裡主要是討論fstream的內容: #include <fstream>  ofstream         //檔案寫操作

android檔案操作路徑

1:內部儲存     data資料夾就是我們常說的內部儲存,當我們開啟data資料夾之後(沒有root的手機不能開啟該資料夾)         data下還有許多資料夾             一個資料夾是app資料夾,app資料夾裡存放著我們所有安裝的app     的ap

C++檔案讀寫(ofstream,ifstream,fstream

在看C++程式設計思想中,每個練習基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含義,在看了幾位大牛的博文後,進行整理和總結: 這裡主要是討論fstream的內容: [java] view plain copy  p