文件、文件夾、文件流操作

来源:http://www.cnblogs.com/bb-love-dd/archive/2016/10/04/5930296.html
-Advertisement-
Play Games

一、獲取文件夾列表 /// /// 獲取文件夾下的文件列表 /// /// string Path:文件夾路徑(@"C:\") /// string SearchPattern:擴展名過濾(" .txt") /// bool SearchChild:為False不搜索子目錄,為True搜索子目錄 / ...


一、獲取文件夾列表

   /// <summary>
   /// 獲取文件夾下的文件列表
   /// </summary>
    /// <param name="Path">string Path:文件夾路徑(@"C:\")</param>
    /// <param name="SearchPattern">string SearchPattern:擴展名過濾("*.txt")</param>
    /// <param name="SearchChild">bool SearchChild:為False不搜索子目錄,為True搜索子目錄</param>
   /// <returns></returns>

    public string[] GetFileList(string Path, string SearchPattern, bool SearchChild)
    {
        //判斷文件夾是否存在
        if (Directory.Exists(Path)==false)
        {
        return null;
        }
        if (SearchChild){
        //搜索子目錄
        return Directory.GetFiles(Path, SearchPattern, SearchOption.AllDirectories);
        }
        else
        {
            //不搜索子目錄
            return Directory.GetFiles(Path, SearchPattern, SearchOption.TopDirectoryOnly);
        }
    }

二、打開文件

    /// <summary>
    /// 打開文件
    /// </summary>
    /// <param name="Path">string Path:文件路徑</param>
    /// <returns></returns>
    public System.Diagnostics.Process OpenFile(string Path)
    {
        if (File.Exists(Path) == true)
        {//打開文件,預設用系統註冊類型關聯軟體打開
            return System.Diagnostics.Process.Start(Path);
        }
        else
        {
            return null;
        }
    }

*可對打開的文件進行一些操作:

public System.Diagnostics.Process p1;

p1=OpenFile(@"c:\1.txt");

p1..Kill();//關閉打開的文件

p1.WaitForExit();//等待打開的文件關閉

p1.MainWindowTitle;//獲取打開文件主視窗的標題

p1.HasExited;//判斷打開的文件是否已關閉

三、獲取文件信息

    /// <summary>
    /// 獲取文件信息
    /// </summary>
    /// <param name="Path">string Path:文件路徑</param>
    /// <returns></returns>
    public FileInfo GetFileInfo(string Path)
    {
        if (File.Exists(Path) == true)
        {
            return new FileInfo(Path);

        }
        else
        {
            return null;
        }
    }

*使用方法如下:

FileInfo fi1 = GetFileInfo(@"f:\1.txt");

fi1.Extension;//獲取文件的擴展名

fi1.DirectoryName;//獲取文件所在完整目錄

fi1.Length;//獲取文件的位元組數

fi1.Name;//獲取文件名,包括擴展名

fi1.Name.Replace(f1.Extension, "");//獲取文件名,不包括擴展名

四、創建文件夾

    /// <summary>
    /// 創建文件夾
    /// </summary>
    /// <param name="Path">string Path:文件夾路徑</param>
    /// <returns></returns>
    public bool CreateDir(string Path)
    {
        try
        {//判斷文件夾是否存在
            if (Directory.Exists(Path) == false)
            {
                Directory.CreateDirectory(Path);
                return true;
            }
            else
            {
                return false;
            }
            
        }
        catch
        {
            return false;
        }
    }

五、用二進位數組生成文件
///


/// 用二進位數組Byte[]生成文件
///

/// string Path:要生成的文件全路徑
/// byte[] StreamByte:要生成文件的二進位 Byte 數組
///
public bool ByteStreamToFile(string Path, byte[] StreamByte)
{
try
{//判斷要創建的文件是否存在,若存在則先刪除
if (File.Exists(Path) == true)
{
File.Delete(Path);
}
//創建文件流(打開或創建的方式)
FileStream FS = new FileStream(Path, FileMode.OpenOrCreate);
//把文件流寫到文件中
FS.Write(StreamByte, 0, StreamByte.Length);
FS.Close();
return true;
}
catch
{
return false;
}
}

六、獲取系統文件夾

Environment.GetFolderPath(Environment.SpecialFolder.Startup)

說明:

ApplicationData 目錄,它用作當前漫游用戶的應用程式特定數據的公共儲存庫。
CommonApplicationData 目錄,它用作所有用戶使用的應用程式特定數據的公共儲存庫。
CommonProgramFiles 用於應用程式間共用的組件的目錄。
Cookies 用作 Internet Cookie 的公共儲存庫的目錄。
Desktop 邏輯桌面,而不是物理文件系統位置。
DesktopDirectory 用於物理上存儲桌面上的文件對象的目錄。
Favorites 用作用戶收藏夾項的公共儲存庫的目錄。
History 用作 Internet 歷史記錄項的公共儲存庫的目錄。
InternetCache 用作 Internet 臨時文件的公共儲存庫的目錄。
LocalApplicationData 目錄,它用作當前非漫游用戶使用的應用程式特定數據的公共儲存庫。
MyComputer “我的電腦”文件夾。
MyMusic “My Music”文件夾。
MyPictures “My Pictures”文件夾。
Personal 用作文檔的公共儲存庫的目錄。
ProgramFiles “Program files”目錄。
Programs 包含用戶程式組的目錄。
Recent 包含用戶最近使用過的文檔的目錄。
SendTo 包含“發送”菜單項的目錄。
StartMenu 包含“開始”菜單項的目錄。
Startup 對應於用戶的“啟動”程式組的目錄。
System “System”目錄。
Templates 用作文檔模板的公共儲存庫的目錄。
-------------------------------------------------------------------------------
文件流操作 之 刪除、複製、轉移多個文件

string[] format = { ".jpg", ".doc", ".exe", ".pdf", "*.xls" };

  1. 03.# 文件流操作 之 刪除、複製、轉移多個文件
  2.  /// <summary>  
  3.   /// 刪除文件夾下麵所有圖片  
  4.   /// </summary>  
  5.   /// <param name="oldpngPath">待刪除文件路徑</param>  
  6.   /// <param name="newpngPath">刪除到的新目錄</param>  
  7.   /// <param name="geshi">操作文件的格式 例如:*.png、*.xml</param>  
  8.   public void deleteAll(string delpath, string format )  
  9.   {  
  10.       string[] files = Directory.GetFiles(delpath, format[0]);  
  11.       foreach (string file in files)  
  12.       {  
  13.           File.Delete(file);  
  14.       }  
  15.   }  
  16.   /// <summary>  
  17.   /// 複製文件夾下麵所有圖片  
  18.   /// </summary>  
  19.   /// <param name="oldpngPath">待複製文件路徑</param>  
  20.   /// <param name="newpngPath">複製到的新目錄</param>  
  21.   /// <param name="geshi">操作文件的格式 例如:*.png、*.xml</param>  
  22.   public void copyALl(string oldpngPath, string newpngPath, string format )  
  23.   {  
  24.       string[] files = Directory.GetFiles(oldpngPath, format[0]);  
  25.       foreach (string file in files)  
  26.       {  
  27.           string otherFile = Path.Combine(oldpngPath, Path.GetFileName(file));  
  28.           File.Copy(file, newpngPath + "\\" + Path.GetFileName(file));  
  29.       }  
  30.   }  
  31.  /// <summary>  
  32.   /// 移動文件夾下的所有文件  
  33.   /// </summary>  
  34.   /// <param name="olderpath">待移動的文件目錄</param>  
  35.   /// <param name="topath">新目錄</param>  
  36.   public void moveAll(string olderpath, string topath)  
  37.   {  
  38.       string[] files = Directory.GetFiles(delpath, format[0]);  
  39.       foreach (string file in files)  
  40.       {  
  41.           File.Move(file, topath); //移動文件  
  42.       }  
  43. }

    目錄操作
    string[] drives = Directory.GetLogicalDrives(); //本地驅動器的名,如:C:\等

string path = Directory.GetCurrentDirectory(); //獲取應用程式的當前工作目錄

Path.GetFileName(@"c:\dir\file.txt"); //獲取子目錄的名字,result的結果是file.txt

Directory.GetFiles(路徑及文件名) //獲取指定目錄中的文件名(文件列表)

DirectoryInfo di = new DirectoryInfo(@"f:\MyDir"); //構造函數創建目錄

DirectoryInfo di=Directory.CreateDirectory(@"f:\bbs"); //創建對象並創建目錄

if (di.Exists == false) //檢查是否存在此目錄

{  di.Create();  } //創建目錄

DirectoryInfo dis = di.CreateSubdirectory("SubDir"); //以相對路徑創建子目錄

dis.Delete(true); //刪除剛創建的子目錄

di.Delete(true); //刪除創建目錄

文件操作:
Directory.Delete(@"f:\bbs2", true); //刪除目錄及其子目錄和內容(如為假不能刪除有內容的目錄包括子目錄)

Directory.GetDirectories 方法 //獲取指定目錄中子目錄的名稱

string[] dirs = Directory.GetDirectories(@"f:", "b*"); Console.WriteLine("此目錄中以b開頭的子目錄共{0}個!", dirs.Length);

foreach (string dir in dirs) { Console.WriteLine(dir); }

Directory.GetFileSystemEntries //獲取指定目錄中的目錄及文件名

Directory.GetLogicalDrives //檢索此電腦上格式為“<驅動器號>:\”的邏輯驅動器的名稱,【語法同上】

Directory.GetParent //用於檢索父目錄的路徑。

DirectoryInfo a = Directory.GetParent(path);

Console.WriteLine(a.FullName);

Directory.Move //移動目錄及其在內的所有文件

Directory.Move(@"f:\bbs\1", @"f:\bbs\2"); //將文件夾1內的文件剪到文件夾2內 文件夾2是剛創建的(即在程式執行的時候,文件夾2是不存在的)

文件流操作

// 對位元組的讀寫操作(包含對非同步操作的支持) Reading Writing Seeking
BinaryReader和BinaryWriter // 從字元串或原始數據到各種流之間的讀寫操作

FileStream類通過Seek()方法進行對文件的隨機訪問,預設為同步

TextReader和TextWriter //用於gb2312字元的輸入和輸出

StringReader和StringWriter //在字元串中讀寫字元

StreamReader和StreamWriter //在流中讀寫字元

BufferedStream 為諸如網路流的其它流添加緩衝的一種流類型.

MemoryStream 無緩衝的流

NetworkStream 互聯網路上的流

編碼轉換

Encoding e1 = Encoding.Default; //取得本頁預設代碼

Byte[] bytes = e1.GetBytes("中國人民解放軍"); //轉為二進位

string str = Encoding.GetEncoding("UTF-8").GetString(bytes); //轉回UTF-8編碼

string srcFileName = @"D:/a.txt";
string destFileName = @"D:/b.txt";

        string srcFolderPath = @"D:/1";
        string destFolderPath = @"D:/6";
        
        //方法一  
        if (System.IO.File.Exists(srcFileName))
        {
            System.IO.File.Move(srcFileName, destFileName);
        }
        if (System.IO.Directory.Exists(srcFolderPath))
        {
            System.IO.Directory.Move(srcFolderPath, destFolderPath);
        }
        
        //方法二 
        if (System.IO.File.Exists(srcFileName))
        {
            System.IO.FileInfo file = new System.IO.FileInfo(srcFileName);
            file.MoveTo(destFileName);
        }
        if (System.IO.Directory.Exists(srcFolderPath))
        {
            System.IO.DirectoryInfo folder = new System.IO.DirectoryInfo(srcFolderPath);
            folder.MoveTo(destFolderPath);

C# 重命名本地硬碟的文件名

1.先在項目中添加引用:Microsoft.VisualBasic

然後在所需使用的文檔中加上using Microsoft.VisualBasic.Devices; 命名空間

2.就下麵兩行

Computer MyComputer = new Computer();

MyComputer.FileSystem.RenameFile(FileName, newFileName);

其中FileName是你所要重命名的文件的全路徑,newFileName僅僅是目標文件名;

創建文件夾:

要實現的功能:在IIS伺服器上創建文件夾,用來存放工廠生產的數據,文件夾目錄按照UserData/DCCFile/year/mounth/filename的方式創建。當用戶存文件的時候查找是否存在此文件夾,不存在的時候則先創建文件夾,然後進行上傳文件。

實現邏輯:預先設定一個虛擬路徑,用server.mappath()將文件要存放的相對路徑映射到絕對路徑,然後用Directory類在絕對路徑中創建文件夾,然後將文件上傳到此絕對路徑中。

實現代碼:

string stryear = System.DateTime.Now.Year.ToString();

string strmonth = System.DateTime.Now.Month.ToString();

string path = Server.MapPath("~/UserData/DCCFile/"+stryear+"/"+strmonth+"/");//文件要上傳到的虛擬路徑

//path為經過映射的在本地磁碟上的絕對路徑

if (!Directory.Exists(path))//判斷這個絕對路徑是否存在

{
Directory.CreateDirectory(path); //不存在文件夾時則創建文件夾
}

FileUpload1.SaveAs(path+FileUpload1.FileName);//上傳新文件

 string filename="文件名";

       string serverpath = System.Web.HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath + "/UserData/DCCFile/" + stryear + "/" + strmonth + "/" + strSysFileNumber + "/");//MeThod1:從ISS伺服器映射文件的絕對路徑

       string serverpath=Server.MapPath("~/UserData/DCCFile/" + stryear + "/" + strmonth + "/" + strSysFileNumber + "/");//MeThod2:從ISS伺服器映射文件的絕對路徑
        string fileFullName = serverpath + filename;//文件的全名
        FileInfo file = new FileInfo(fileFullName);
        if (File.Exists(fileFullName))
        {
            //將文件下載到客戶機
            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(file.Name));
            Response.ContentType = "application/octet-stream";
            Response.Filter.Close(); //Response.Filter 是一個 Stream 對象(表示位元組序列的流),Response.Filter.CLose() 表示關閉此流對象並釋放相關資源。
            Response.WriteFile(file.FullName);
            Response.End();
        }
        else
        {
            Page.ClientScript.RegisterStartupScript(GetType(), "alert", "<script language='javascript'>alert('下載失敗!')</script>");
        }

說明:application/octet-stream 是一種MIME類型,表示可以實現任何格式的文件下載

Content-disposition 是 MIME 協議的擴展,MIME 協議指示 MIME 用戶代理如何顯示附加的文件。

我們在開發web系統時有時會有以下需求:
希望某類或者某已知MIME 類型的文件(比如:.gif;.txt;*.htm)能夠在訪問時彈出“文件下載”對話框
希望以原始文件名(上傳時的文件名,例如:山東省政府1024號文件.doc)提供下載,但伺服器上保存的地址卻是其他文件名(如12519810948091234_asdf.doc)
希望某文件直接在瀏覽器上顯示而不是彈出文件下載對話框

解決辦法是 Response.AddHeader "content-disposition","attachment; filename=fname.ext"

將上述需求進行歸我給出如下例子代碼:
public static void ToDownload(string serverfilpath,string filename)
{
FileStream fileStream = new FileStream(serverfilpath, FileMode.Open);
long fileSize = fileStream.Length;
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename="" + UTF_FileName(filename) + "";");
////attachment --- 作為附件下載
////inline --- 線上打開
HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
byte[] fileBuffer = new byte[fileSize];
fileStream.Read(fileBuffer, 0, (int)fileSize);
HttpContext.Current.Response.BinaryWrite(fileBuffer);
fileStream.Close();
HttpContext.Current.Response.End();
}

private static string UTF_FileName(string filename)
{
return HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8);
}

UTF_FileName方法 主要為瞭解決包含非英文/數字名稱的問題,比如說文件名為“衣明志.doc”,使用該方法客戶端就不會出現 亂碼了。作用同上面的Server.UrlEncode


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 如果你在設置asp.net mvc自定義錯誤頁面時遇到問題,這並不止你一個人。驚訝之餘你的做法是正確的,沒有起到作用的原因是其一部分錯誤是由asp.net管道處理的,另一部分是由iis直接處理。 通常情況 (我期望是這種情況,在一些其他框架/伺服器上) 我們只需要在一個地方配置自定義錯誤頁就可以了, ...
  • 第一次寫博客,想不到寫什麼好b( ̄▽ ̄)d ,考慮的半天決定從sqlhelper開始,sqlhelper對程式員來說就像helloworld一樣,很簡單卻又很重要,helloworld代表著程式員萌新第一次寫代碼,而sqlhelper則是初次接觸資料庫(不知道這種說法對不對)。 好了不廢話了,下麵直 ...
  • 我們都知道ORM全稱叫做Object Relationship Mapper,也就是可以用object來map我們的db。 而且市面上的orm框架有很多,有重量級的Entity Framework,有輕量級的Dapper、PetaPoco等 假如你喜歡原生的Sql語句、又喜歡ORM的簡單、... ...
  • 一、背景 在之前做的小項目里有一需求是:要求將一活動錄入的數據進行統計,並以excel表格形式導出來,並且對錶格格式要求並不高。 二、問題分析 鑒於用戶只要求最終將資料庫中的數據導出excel,對於格式要求不高,因此只需要在頁面上加入一條鏈接,後臺action中讀取數據然後通過第三方組件導出,再下載 ...
  • 本人最近想做個桌面應用,參考了一下時下流行的各個軟體,發現大部分軟體的標題欄都是自定義的,甚至沒有標題欄,整個視窗為一個整體。 從整體感來說,預設的標題欄非常的破壞軟體風格的一致性,尤其是設置背景圖時,標題欄的顏色會顯得很礙眼。 所以,找了一些大神分享的技術貼,也同時給大家分享下我的心得。 參考鏈接 ...
  • 這篇文章主要講述 IIS 8 部署免費 HTTPS 。 HTTPS 是互聯網 web 大勢所趨。TaSaid 最近把機房從香港遷移到青島,趁著這次機會,觀望並折騰了幾天,在遷移中順便完成了 HTTPS 的部署。 ...
  • 剛接到這樣的任務時,沒有感覺到任何壓力,不就是給移動端應用提供數據嗎?那邊發來參數,這邊處理數據,返回JSON。做網站開發時經常使用ajax請求後臺數據,不就是這麼回事嗎。於是,在確認完需求後就開始幹了,很快,進入聯調階段,這個時候各種問題來了,忙得不可開交。吃一塹,長一智,項目結束後總結了下,大致 ...
  • 虛方法和抽象方法都可以供派生類重寫,它們之間有什麼區別呢? 1. 虛方法必須有實現部分,併為派生類提供了覆蓋該方法的選項 抽象方法沒有提供實現部分,抽象方法是一種強制派生類覆蓋的方法,否則派生類將不能被實例化。如: //抽象方法 public abstract class Animal { publ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...