基礎鞏固系統(二) 檔案操作(1)

2022-01-19 16:57:12 字數 4086 閱讀 5883

signet

在.net開發中,對於檔案系統操作的相關類,幾乎(但不是全部)都在system.io命名空間中。

而用於瀏覽檔案系統和執行操作的,如移動、複製和刪除檔案等,有以下幾個類:

system.marshalbyrefobject - 這是.net類中用於遠端操作的基物件類。它允許在應用程式域之間編組資料。

filesysteminfo - 這個表示任何檔案系統物件的基類。

fileinfo和file - 這些類表示檔案系統上的檔案。

directoryinfo 和 directory - 這些類表示檔案系統上的資料夾。

path - 這個類包含的靜態成員可以用於處理路徑名。

driveinfo - 它的屬性和方法提供了指定驅動器的資訊。

以上的directory 類和file 類只包含靜態方法,不能被例項化。如果只對資料夾或者檔案執行乙個操作,使用這些類是很有效的,因為這樣可以省去例項化.net類的系統開銷。

directoryinfo 和 fileinfo 類實現與directory類和file類大致相同的公共方法,並擁有公共屬性和建構函式,但他們都是有狀態的,並且這些類的成員都不是靜態的。

using system;

using system.collections.generic;

using system.io;//檔案操作的命名空間}}

對於資料夾(或者「目錄」)的操作,就可以例項化directoryinfo或者使用directory類。

using system;

using system.collections.generic;

using system.io;//檔案操作的命名空間}}

執行以上**,你會發現,報錯了.....

這個是為什麼呢?為什麼directoryinfo類在例項化的時候沒有丟擲異常,卻在呼叫其實例方法時候丟擲了異常呢?

原因很簡單,因為directoryinfo類在通過資料夾路徑字串例項化物件時,是不會對路徑進行驗證的,而在其呼叫例項方法的時候,才會對其進行驗證。

所以,我們可以進行以下操作:

using system;

using system.collections.generic;

using system.io;//檔案操作的命名空間

else

console.readline();//等待輸入 方便檢視結果}}

}

執行結果如下:

很顯然,提示路徑不存在!

常用屬性列表:

名稱作用

creationtime建立檔案或資料夾的時間

directoryname(僅用於fileinfo)

包含資料夾的完整路徑名

parent(僅用於directoryinfo)

指定子目錄的父目錄

exists

檔案或資料夾是否存在

extension 

檔案的副檔名,對於資料夾返回空白

fullname 

檔案或資料夾的完整路徑名

lastaccesstime

最後一次訪問檔案或資料夾的時間

lastwritetime 

最後一次修改檔案或資料夾的時間

name 

檔案或資料夾的名稱

root(僅用於directoryinfo)

路徑的根部分(磁碟名稱)

length(僅用於fileinfo)

返回檔案的大小(以位元組為單位)

常用方法列表:

名稱作用

create()

建立給定名稱的資料夾或者空檔案。對於fileinfo,該方法會返回乙個流物件,以便寫入檔案。

delete()

刪除檔案或者資料夾。對於資料夾,有乙個可以遞迴的delete選項。

moveto()

移動和/或重新命名檔案或資料夾。

copyto()

(只適用fileinfo)複製檔案,注意資料夾沒有複製方法。如果複製完整的目錄樹,需要單獨複製每個檔案,建立對應於舊資料夾的新檔案。

getdiectories()

(只適用於directoryinfo)返回directoryinfo物件陣列,該陣列表示資料夾中包含的所有資料夾。

getfiles()

(只適用於fileinfo)返回fileinfo物件陣列,該陣列表示資料夾中包含的所有檔案。

getfilesysteminfos()

返回fileinfo和directoryinfo物件,它把資料夾中包含的所有物件表示為乙個filesysteminfo引用陣列。

directoryinfo myfolder = new directoryinfo(@"c:\my");//通過資料夾路徑字串 例項化directoryinfo物件

if (!myfolder.exists)//判斷檔案目錄是否存在

myfolder.create();//不存在 則建立資料夾

//輸出檔案目錄資訊

console.writeline(myfolder.creationtime.tostring());//輸出檔案目錄的建立時間

console.writeline(myfolder.parent.tostring());//輸出 其上級目錄

console.writeline(myfolder.root.tostring());//輸出 路徑的根部分(磁碟名稱)

console.writeline(myfolder.fullname);//輸出 資料夾的完整路徑名

console.readline();//等待輸入 方便檢視結果

輸出結果資訊如下:

中間輸出上級目錄 為空?這個理由很簡單,因為c:\my路徑的上級目錄就為磁碟c了,所以不存在上級目錄了,故為空。

path類不能夠例項化,但他提供了一些靜態方法,可以很容易的對路基名進行操作。

例如,我要顯示資料夾 d:\我的資料庫\downloads 中的 11.txt 檔案的完整路徑名,可以用以下**查詢檔案的路徑

//combine方法: 將字串陣列組合成乙個路徑

console.writeline(system.io.path.combine(@"d:\我的資料庫\downloads", "11.txt"));

console.readline();

輸出結果如下:

好,可能你會問我,直接拼湊字串不就可以了嗎?

好,那我告訴你答案:因為path類在處理不同作業系統上的路徑時,能夠識別不同的格式。例如:windows上是用「\」作為路徑的分割符號,

而unix上路徑的分割符號是「/」,所以如果現在的系統要移植到unix或者其它非windows系統上,那豈不是會識別不了,甚至發生錯誤。

所以,出於這樣的考慮還是推薦使用path類來拼接路徑字串。

path類的一些靜態字段:

屬性說明

altdirectoryseparatorchar

提供一種與平台無關的方式,來指定分隔目錄級別的另乙個字元。在windows上使用「/」符號,而在unix上使用「\」符號。

directoryseparatorchar

提供一種與平台無關的方式,來指定分隔目錄級別的另乙個字串。在windows上使用「/」符號,在unix上使用「\」符號。

pathseparator

提供一種與平台無關的方式,來指定劃分環境變數的路徑字串,預設為分號

volumeseparatorchar

提供一種與平台無關的方式,來指定容量分隔符,預設為冒號

1 檔案測試 2 檔案操作

1 檔案測試函式 2 檔案操作 新建檔案 fopen filename,w 以 寫 的方式開啟乙個不存在的檔案,就會新建該檔案 檔案刪除 unlink 檔案複製 copy filename,aaa bb.txt 盡量使用 和相對路徑,因為linux只認 也沒有磁碟分割槽,而windows 和 都認 ...

檔案操作《1》檔案的讀寫

檔案操作在c語言中是乙個不能忽略的知識點,學習檔案操作也可以解除大家對檔案的誤解,可能許多人會認為只有資料夾中的文字檔案,編譯c語言時的原始檔和標頭檔案才是檔案等,其實不能,計算機中的顯示器 滑鼠 鍵盤 印表機等都可以稱為檔案,沒想到吧,其中的鍵盤是標準輸入檔案,顯示器是標準輸出檔案 理解了檔案後我...

1 檔案io操作習題

4 1 tee命令是從標準輸入中讀取資料,直至檔案結尾,隨後將資料寫入標準輸入和命令列引數所指定的檔案。請使用i o系統呼叫實現tee命令,預設情況下,若已存在命令列引數指定檔案同名的檔案tee命令會將其覆蓋。如檔案以存在,請實現 a命令列選項 tee a file 在檔案結尾出追加資料。inclu...