1. 程式人生 > >C++對資料檔案的操作

C++對資料檔案的操作

關於檔案

1.檔案一般指儲存在外部介質上資料的集合
2.作業系統是以檔案為單位對資料進行管理的
3.根據檔案中資料的組織形式,可分為ASCII檔案和二進位制檔案

C++中輸入輸出常量是在ios類中定義的,他們是列舉常量,有多種選擇

方式 作用
ios::in 以輸入的方式開啟檔案
ios::out 以輸出的方式開啟檔案(這是預設方式),如果已有此名字的檔案,則將其原有的內容全部清除
ios::app 以輸出的方式開啟檔案,寫入的資料新增在檔案末尾
ios:ate 開啟一個已有的檔案,檔案指標指向檔案末尾
ios::trunc 開啟一個檔案,如果檔案已經存在,則刪除其中全部資料;如果檔案不存在,則建立新檔案。如果指定了ios::out方式,而未指定ios::app,ios::ate,ios::in,則同時預設此方式
ios::binary 以二進位制開啟一個檔案,如果不指定此方式則預設為ASCII方式
ios::nocreate 開啟一個已有的檔案,如果檔案不存在,則開啟失敗
ios::noreplace 如果檔案不存在則建立新檔案,如果檔案存在則操作失敗
ios::in|ios::out 已輸入和輸出的方式開啟一個檔案,檔案可讀可寫
ios::out|ios::binary 以二進位制方式開啟一個輸出檔案
ios::in|ios::binary 以二進位制方式開啟一個輸入檔案

下面是程式碼,把10個數字以ASCII寫入一個檔案

#include<iostream>
#include<fstream>//從iostream派生而來,用來支援對磁碟檔案的輸入輸出
using namespace std;

int main()
{
ofstream outfile;//定義ofstream類物件outfile
outfile.open("test.txt",ios::out);//輸出方式開啟一個檔案
if(!outfile) { cerr<<"open error"<<endl; return -1; } int i,a[10]; for(i=0;i<10;i++) { cin>>a[i]; outfile<<a[i]<<" "; } outfile.close(); return 0; }

輸入10個數字
這裡寫圖片描述
建立了一個檔案
這裡寫圖片描述
裡面寫入了數字
列表內容

讀檔案

#include<iostream>
#include<fstream>//從iostream派生而來,用來支援對磁碟檔案的輸入輸出
using namespace std;

int main()
{
ifstream infile;//定義ofstream類物件outfile
infile.open("test.txt",ios::in);//輸入方式開啟一個檔案
if(!infile)
    {
    cerr<<"open error"<<endl;
    return -1;
    }
  int i,a[10];
        for(i=0;i<10;i++)
        {
        infile>>a[i];
        cout<<a[i]<<" ";
        }
 infile.close();
return 0;
}

這裡寫圖片描述

對二進位制檔案的操作

二進位制檔案除了可以作為輸入檔案外也可以作為輸出檔案。
對二進位制檔案的操作主要是通過istream類的成員函式read和write來實現
原型為

istream&read(char*buffer,int len);
ostream&write(const char*buffer,intlen);

a.write(p1.50);
b.read(p2,30);
a是輸出檔案流物件,從p1指向的單元開始的50個位元組的內容不加轉換的寫到與a關聯的磁碟中。
b是輸入檔案流物件。從b所關聯的磁碟檔案中讀取30個位元組(或遇到EOF結束),存放到p2裡。

#include<iostream>
#include<fstream>//從iostream派生而來,用來支援對磁碟檔案的輸入輸出
using namespace std;
struct student
{
char name[20];
int age;
};
int main()
{
student stu[2]={"zhang",12,"XiaoMing",10};
ofstream outfile("STU.bin",ios::binary);
    if(!outfile)
    {
    cerr<<"Open error"<<endl;
    return -1;
    }
        int i;
        for(i=0;i<2;i++)
        {
        outfile.write((char*)&stu[i],sizeof(stu[i]));
        }
outfile.close();
/***************************/
student stu2[2];
ifstream infile("STU.bin",ios::binary);
if(!infile)
    {
    cerr<<"Open error"<<endl;
    return -1;
    }
for(i=0;i<2;i++)
        {
        infile.read((char*)&stu2[i],sizeof(stu2[i]));
        }
for(i=0;i<2;i++)
{
cout<<stu2[i].name<<endl\
    <<stu2[i].age<<endl<<endl;
}
infile.close();
return 0;
}

與檔案指標有關的流成員函式

在磁碟檔案中有一個檔案讀寫位置標記,檔案每讀取或者寫入一個位元組,位置標記就向後移動一個位元組。對於二進位制檔案,允許對位置標記進行控制,使他按照使用者的意圖進行移動。

成員函式 作用
gcount() 得到最後一次輸入所讀取的位元組數
tellg() 得到輸入檔案位置標記的當前位置
tellp() 得到輸出檔案位置標記的當前位置
seekg(檔案中的位置) 將輸入檔案位置標記移動到指定的位置
seekg(位移量,參考位置) 以參考位置為基礎移動若干位元組
seekp(檔案中的位置) 將輸c出文件位置標記移動到指定的位置
seekp(位移量,參考位置) 以參考位置為基礎移動若干位元組

結尾是p表示 put 指輸出檔案
結尾時g表示 get 指輸入檔案

參考位置可以使下面之一

參考位置 意義
ios::beg 檔案開頭(begin),預設值。
ios::cur 位置標記當前的位置(current)
ios::end 檔案末尾

下面實現對三個學生資訊
1.寫入磁碟檔案
2.讀出第二個學生的資訊
3.修改第三個學生的資訊
4.顯示所有學生的資訊

#include<iostream>
#include<fstream>//從iostream派生而來,用來支援對磁碟檔案的輸入輸出
#include<string.h>//strcpy要用
using namespace std;
#define N 3
struct student
{
char name[20];
int age;
};
int main()
{
student stu[N]={"zhang",12,
                "XiaoMing",10,
                "DaLan",15};

fstream iofile("STU.dat",ios::in|ios::out|ios::binary);
    if(!iofile)
    {
    cerr<<"Open error"<<endl;
    return -1;
    }
/******************寫入磁碟******************/
        int i;
        for(i=0;i<N;i++)
        {
        iofile.write((char*)&stu[i],sizeof(stu[i]));
        }

/**************讀第二個學生的資訊*************/
student stu2;
iofile.seekg(2*sizeof(stu[0]),ios::beg);//移動位置
iofile.read((char*)&stu2,sizeof(stu2));//讀取

cout<<stu2.name<<endl\
    <<stu2.age<<endl;
/**************修改第三個學生的資訊*************/
strcpy(stu[2].name,"CaiXianYu");
stu[2].age=21;
iofile.seekp(2*sizeof(stu[0]),ios::beg);//移動位置
iofile.write((char*)&stu[2],sizeof(stu[2]));//寫入
/********************列印所有資訊********************/
iofile.seekg(ios::beg);//移動位置
student stu_out;
for(i=0;i<3;i++)
{
iofile.read((char*)&stu_out,sizeof(stu_out));
cout<<stu_out.name<<endl\
    <<stu_out.age<<endl<<endl;
}

iofile.close();
return 0;
}

字串流

相關推薦

C++資料檔案操作

關於檔案 1.檔案一般指儲存在外部介質上資料的集合 2.作業系統是以檔案為單位對資料進行管理的 3.根據檔案中資料的組織形式,可分為ASCII檔案和二進位制檔案 C++中輸入輸出常量是在ios類中定義的,他們是列舉常量,有多種選擇

C#Queue<T>(佇列)資料操作

C裡的佇列進行資料操作很方便的,佇列根據先進先出的原則(就是第一個存進去的資料,可以第一個拿到),通過佇列的屬性可以拿到佇列裡的最小值和最大值,也可以計算資料的SUM,還可以通過某一個數進行排序,等等吧,大家有興趣可以研究下。下面我就直接寫程式碼展示一些基本的操作。 程式碼: using S

C++二進位制檔案的讀寫操作

二進位制檔案不是以ASCII程式碼存放資料的,它將記憶體中資料儲存形式不加轉換地傳送到磁碟檔案,因此它又稱為記憶體資料的映像檔案。因為檔案中的資訊不是字元資料,而是位元組中的二進位制形式的資訊,因此它又稱為位元組檔案。對二進位制檔案的操作也需要先開啟檔案,用完後要關閉檔案。

c++txt檔案讀取操作+例項程式碼

因c++檔案操作一直要用,所以就特此寫一篇部落格來記錄一下c++對txt檔案的讀取操作。1.c++檔案流:fstream   //檔案流ifstream  //輸入檔案流ofstream  //輸出檔案流2.檔案路徑的表示檔案路徑的表示可以分為絕對路徑和相對路徑。絕對路徑:p

C++ASCII檔案操作例子

從鍵盤讀入一行字元,把其中的字母字元依次放在磁碟檔案f2.dat中,再把它從磁碟檔案讀入程式,將其中的小寫字母改寫成大寫字母,再存入磁碟檔案f3.dat. code: #include<iostream> #include<fstream> #inc

C# dataGridView選中一行右鍵出現選單,資料進行操作

1.為dataGridView繫結資料,設定資料選定一行this.dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;   //選中整行2.新增contextMenuStrip控制元件並繫

12c容器資料庫匯入操作_筆記(Linux/oracle借用shell工具匯入資料檔案操作

Linux/oracle借用shell工具匯入資料檔案操作 一、使用shell工具,遠端連線到Linux下的oracle資料庫服務上 Xshell 6 (Build 0095) Copyright (c) 2002 NetSarang Computer, Inc. All rights reserved

C語言(四 檔案操作、遞迴)

檔案讀寫 我們用**fopen()**來新建一個檔案或開啟一個已有的檔案. 函式原型為File *fopen(const char *filename , const char *mode) filename是檔名,mode代表訪問方式。 mode

R語言學習(四)——資料進行操作

判斷變數的屬性 is.character(x) #判斷是否為字元型 is.numeric(x) #判斷是否為數值型 is.vector(x) #判斷是否為一個向量 is.matrix(x) #判斷是否為一個

C#XML完整操作

C#對XML完整操作 http://zhidao.baidu.com/question/74181361.html <?xml version="1.0"?> <birthday> <NO1>    <type>型別<

C語言之檔案操作

一、開啟檔案 1、函式 fopen(path, type) 2、引數介紹 引數 型別 說明 備註 path 字串 檔案路徑 如”./h

python csv檔案操作

# scrapy pipline class BazaarPipeline(object): def open_spider(self, spider): self.filename = open("digital.csv", "wb") # 建立一

使用C++資料進行Base64加密解密

首先是對資料的base64加密 std::string encode_base64(const std::string& d, bool base64url = false) { const char alphabet_base64[] = "ABCDEFGH" "IJKLM

C# SQL 資料庫操作總結

C#對 SQL 資料庫操作總結                      &nbs

C#資料庫的操作(查詢,刪除,更新)

查詢: static IQueryable<Outlet> Query(string Region, string DC, string CustomerCode, string KA, string OutletCode, string NestleOutletCode

Linux C高階程式設計——檔案操作之庫函式

Linux C高階程式設計——檔案操作之庫函式 宗旨:技術的學習是有限的,分享的精神是無限的 ——為什麼要設計標準I/O庫? 直接使用API進行檔案訪問時,需要考慮許多細節問題 例如:read、write時,緩衝區的大小該如何確定,才能使效率最優 標準I/O庫封裝了諸多

Linux C高階程式設計——檔案操作之系統呼叫

Linux C高階程式設計檔案操作之系統呼叫 宗旨:技術的學習是有限的,分享的精神是無限的!         庫函式是一些完成特定功能的函式,一般由某個標準組織製作釋出,並形成一定的標準。使用庫函式編寫的函式一般可以應用於不同的平臺而不需要做任何修改,具有很好的可移植

c#資料庫的操作程式碼(MySql.Data.dll包)

using System; using MySQLDriverCS; using System.Data; using MySql.Data.MySqlClient; namespace 實驗室資訊管理 {     class DBHelper     {        

c# 資料庫的操作

     【學習點點滴滴】自己也才學習c#  所以寫的都是寫簡單的。 就是為了記錄學習的點點滴滴;    所以寫得比較簡。    string id=textbox.text.tostring();    sqlconnection cnn = new sqlconne

C++讀寫檔案操作

原文來自:http://blog.csdn.net/study16/article/details/5879428 來源:http://www.javaeye.com/topic/383903 讀 《C++ Primer Plus》第17章4-7節 一     頭