程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#的文件存儲管理

C#的文件存儲管理

編輯:關於C#

17.2.1 目錄管理

.Net框架結構在名字空間System.IO中為我們提供了Directory類來進行目錄管理。利用它,我們可以完成對目錄及其子目錄進行創建、移動、浏覽等操作,甚至還可以定義隱藏目錄和只讀目錄。

Directory的構造函數形式如下:

public Directory(string path);
其中的參數path表示目錄所在的路徑。

Directory的主要屬性有:

●Attributes:0x01表示只讀,0x02表示隱藏。

●Name:當前路徑名。

●Parent:上一級父目錄名。

●Root:所在根目錄名。

●Creation Time:目錄創建時間。

●LastAccessTime:上一次訪問目錄的時間。

●LastWriteTime:上一次修改目錄的時間。

我們常用到的Directory類的一些成員方法有:

●CreateDirectory(string path):創建子目錄。

●CreateDirectories(string path):創建多級子目錄。

●CreateFile(string filename):在當前目錄下創建一個新文件。

●Delete():刪除目錄。

下面的例子中,我們利用Directory的CreateDirectory和CreateDirectories方法創建一級和二級目錄。

程序清單17-1:

using System;
using System.IO;
class DirectoryTest
{
 public static void Main()
 {
  Directory d=new Directory("c:\\C#");
  Directory d1;
  Directory d2;
  try{
     d1=d.CreateSubdirectory("file1");
  }
  catch(IOException e)
  {
   Console.WriteLine("directory file1 failed because:{0}",e);
   return;
  }
  try{
     d2=d.CreateSubdirectories("file1\\file2");
     //等於d2=d1.CreateSubDirectory("file2");
  }
  catch(IOException e)
  {
   Console.WriteLine("directory file2 failed because:{0}",e);
   return;
  }
   Console.WriteLine("Create directory successfully!");
 }
}

上面例子中的異常IOException表示准備創建的目錄名已經存在。System.IO中提供了各種輸入輸出的異常,便於我們了解任務失敗的原因所在,或者是給程序的用戶提示信息。

同樣我們可以進行目錄刪除操作。

程序清單17-2:

using System;
using System.IO;
class DirectoryTest
{
 public static void Main()
 {
  Directory d=new Directory("c:\\C#file1");
  Directory[] subdir;
  try{
    subdir=d.GetDirectories();
  }
  catch(DirectoryNotFoundException e)
  {
   Console.WriteLine("Can not find such a directory because:{0}",e);
   return;
  }
  foreach(Directory dir in subdir){
    dir.Delete();
  }
  d.Delete();
  Console.WriteLine("Delete successfully!");
  }
}

17.2.2 文件管理

File類通常和FileStream類協作來完成對文件的創建、刪除、拷貝、移動、打開等操作。

File類的構造函數形式為:

public File(string fileName);

同樣,File類也有自己的屬性,如絕對路徑名DerictoryName、創建時間CreationTime、上次訪問時間LastAccessTime、上次修改時間LastWriteTime、文件長度Length等。

File類為我們提供的方法主要有CopyTo、MoveTo、Delete等,利用它們可以完成一些基本的文件管理。

下面給出的例子用於簡單的文件拷貝。這是一個帶命令行參數的可執行文件,第一個參數表示源文件的絕對路徑名,第二個參數表示目標文件的絕對路徑名。

程序清單17-3:

using System;
using System.IO;
class FileTest
{
 public static void Main(String[] args)
 {
  //驗證參數輸入是否正確
  string sourcename;
  string targetname;
  try{
    sourcename=args[0];
  }
  catch
  {
   Console.WriteLine("Please input the name of the source file correctly");
   return;
  }
  try{
    targetname=args[1];
  }
  catch
  {
   Console.WriteLine("Please input the name of the target file correctly");
   return;
  }
  //進行文件拷貝操作
  File file;
  try{
    file=new File(sourcename);
  }
  catch
  {
   Console.WriteLine("Can not open the source file named'{0}'",sourcename);
   return;
  }
  try{
    file.CopyTo(targetname,true);
  }
  catch
  {
   Console.WriteLine("Can write the target file named'{0}'",targetname);
   return;
  }
  Console.WriteLine("File copys successfully!");
 }
}

上面我們用到了File的CopyTo方法。若改為MoveTo方法,則程序可以用於文件的移動操作。

下面的例子用於刪除當前目錄下的所有文件。

程序清單17-4:

using System;
using System.IO;
class FileTest
{
 public static void Main()
 {
  Console.WriteLine("Are you sure to delete all the files in current directory?");
  Console.WriteLine("Press 'Y' then enter to continue,any other key to abort");
  int a=Console.Read();
  if(a=='Y'||a=='y'){
    Console.WriteLine("Deleting the files...");
  }
  else{
    Console.WriteLine("canceled by user");
    return;
  }
  Directory dir=new Directory(".");
  foreach(File f in dir.GetFiles()){
    f.Delete();
  }
 }
}

其中,語句foreach(File f in dir.GetFiles())表示查找當前所有文件。Directory類的成員方法GetFiles有兩種重載形式:

public File[] GetFiles();
public File[] GetFiles(string searchCriteria);

後面一種方法中的參數表示搜索文件的條件。

我們對程序17-4可以稍做改動,把最後一段代碼改寫為:

foreach(File f in dir.GetFiles("*.exe")){
f.Delete();
}
這樣,程序實際上是變成了刪除當前目錄下的所有擴展名為.exe的文件。

值得一提的是,作者在使用File.Delete方法時遇到了一個有趣的現象。文件刪除後,在Windows的回收站中找不到,但是使用工具軟件Norton Unerase Wizard卻成功地找到並恢復了被刪除了的文件,而且文件名還保存完好(Windows徹底刪除的文件恢復時文件名的第一個字符已被刪除)。看來File.Delete方法也並不是徹底地抹去文件的內容,而只是對被刪除的文件作出某個標記而已。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved