在檔案操作之前要匯入命名空間:system.io;
讀寫檔案的步驟分為5步:
1、建立檔案流
語法:
filestream fd = new filestream("檔案路徑",filemode);
//其中「filemode」是列舉型別的,列舉型別的主要作用是約定乙個變數的值的範圍;其中包括有:
create:用指定名稱新建乙個檔案,如果檔案存在就改寫舊檔案;
createnem:新建乙個檔案;
open:開啟乙個檔案;
openorcreate:開啟乙個檔案,如果檔案不存在就用指定的名稱新建乙個檔案;
truncate:檔案存在,先把裡面的內容刪除掉,再往裡面寫內容,如果檔案不存在就會報錯。
2、建立閱讀器\寫入器
建立:
streamreader sr = new streamreader(filestream fs);
屬性:
sr.readline(); 讀取檔案流中一行資料;
sr.readtoend(); 從當前位置讀到末尾,返回字串;
sr.close(); 關閉
2、建立寫入器:streamwriter
建立:
streamwriter sw = new streamwriter(filestream fs);
屬性:
sw.write(); 用於寫入流,該流是已建立好的流;
sw.writeline(); 用於寫入一行資料,後跟換行符;
sw.close(); 關閉
3、執行讀寫操作
這裡只需要寫你需要的**
4、關閉閱讀器\寫入器
關閉寫入器:sw.close();
5、關閉檔案流
關閉檔案流:fs.close();
流:是乙個用於資料傳輸的物件;
檔案流:c#裡面指的檔案流是filestream,主要用於讀寫檔案中的資料;
用streamreader讀取檔案中的文字檔案的時候,可能會出現亂碼的問題;要解決這個問題就要指定編碼格式;
streamreader sr = new streamreader(filestream fs,encoding.default);
這裡的encoding類就是指定編碼格式;encoding位於system.text命名空間;
encoding.utf8: 獲得utf-8格式的編碼;
encoding.default: 獲得當前作業系統的當前編碼;
也可以通過encoding類的靜態方法getencoding(string name)指定字元編碼,引數name必須是c#支援的編碼名;
streamreader sr = new streamreader(filestream fs,encoding.getencoding("gb2312"));
這就是encoding的方法getencoding(string name)的使用;
常見的編碼名:ascii、ansi、gb2312、unicode(utf-16、utf-32、utf-8),c#內部預設支援utf-8編碼;
檔案有兩個類:file(是靜態類)和 fileinfo(非靜態類)
1、file的方法:
static void delete(string path) 刪除檔案
static void bool exists(string path) 檢查指定檔案是否存在
static void copy(string sourefilepath,string destfilepath) 複製檔案
static void move(string sourefilename,string destfilename) 移動檔案
static filestream create(string path) 新建檔案
注:path:路徑、sourefilepath :原檔案路徑、destfilename :新檔案路徑、
移動和複製的區別:複製原檔案還存在;
2、fileinfo:禁止繼承
建構函式:fileinfo只有乙個建構函式
public fileinfo(string filename){}
fileinfo的屬性和方法
屬性:exists :用於檢查檔案是否存在;
directoryinfo directory:
string directoryname:檔案所在目錄;
long length:檔案大小;
override string name :檔名稱;
方法:delete() :這個刪除方法是沒有引數的;
copyto(string path) :複製,這裡的path是指新路徑;
moveto(string destfilename) :移動,這裡的destfilename是指新路徑;
filesysteminfo類是fileinfo的父類;
string fullpath :全路徑;
string extension :字尾;
這裡也是和file一樣的,還有其他方法可以檢視原始碼進行學習;
目錄也有兩個類分別是directory和directoryinfo
1、directory-----靜態類
directory的方法:
bool exists(string path) :檢查指定的檔案是否存在;
void move(string sourcedirname,string destdirname) :移動檔案
void delete(string path,bool recursive) :刪除,當recursive為true時,連同子目錄中的所有內容都刪除;
datetime getcreationtime(string path) :得到該檔案建立的時間;
string getdirectories(string path) :得到所有的子目錄;
string getfiles(string path):得到所有子檔案;
以上是比較常用的方法,需要學習更多的方法請檢視原始碼;
2、directoryinfo -----非靜態類
建立:public directoryinfo(string path);
屬性:override bool exists :檢查指定檔案是否存在;
string name:檔名;
directoryinfo parent :拿到父目錄
方法:void delete() 刪除,前提是目錄裡沒有其他檔案,否則會報錯;
void delete(bool recursive) :當recursion為true時連同子目錄中的所有內容都刪除;
directoryinfo getdirectories() :得到所有子目錄;
directoryinfo getfiles() :得到所有子檔案;
需要其他方法的可以檢視原始碼;
靜態類非靜態類
只包含靜態成員
可以包含靜態成員
不可以包含例項成員
可以包含例項化成員
使用類名呼叫靜態成員
使用例項物件呼叫非靜態成員
不能被例項化
可以被例項化
不能包含例項建構函式
可以包含例項建構函式
用static修飾
不用static修飾
定義類中的靜態成員的語法:
class 類名
}
檔案的操作
openopen 內建函式,open底層呼叫的是作業系統的介面 f1,變數.f1,fh,file,file handler,f h 檔案控制代碼.通過對檔案的任何操作都會通過檔案控制代碼.的方式.encoding 可以不寫,不寫引數,預設編碼本.預設編碼本 作業系統的預設的編碼 檔案控制代碼 是乙個...
檔案的操作
只要牽扯到檔案的操作,都是字串 開啟檔案用到 w 原始檔內容會被清空 相當於新建 sprip 取消換行符 換行符2個位元組 一 開啟 win gbk mac linux utf 8 f open 歌詞 f 檔案操作符 檔案控制代碼 檔案操作物件 習慣叫 f file f obj f handler ...
檔案的操作
路徑 開啟方式 編碼格式。不標註開啟方式預設為唯讀。f1 open d a.txt encoding utf 8 mode r f1 為檔案控制代碼,也叫檔案物件,所有的讀寫操作都是通過檔案控制代碼完成的 生成檔案控制代碼 檔案的讀 寫,檔案寫操作必須以寫形式開啟檔案,檔案讀操作必須以讀或讀寫操作開...