首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# Directory 目錄操作進階與 FileStream 位元組串流讀寫深度解析

     編輯:關於C語言

一、Directory 與 DirectoryInfo 進階應用:ASP.NET 檔案上傳核心邏輯

完整上傳流程程式碼解析


// 1. 取得檔案資訊
string fileName = FileUpload.FileName;
string ext = fileName.Substring(fileName.LastIndexOf('.') + 1).ToLower();

// 2. 驗證副檔名
string[] allowed = { "rar", "doc", "txt", "pdf" };
if (!allowed.Contains(ext)) return; // 不符合直接返回

// 3. 驗證大小(50MB)
if (FileUpload.FileBytes.Length > 50 * 1024 * 1024) return;

// 4. 目標目錄
DirectoryInfo uploadDir = new DirectoryInfo(Server.MapPath("~/fileupload/"));

// 5. 確保目錄存在
if (!Directory.Exists(uploadDir.FullName))
    Directory.CreateDirectory(uploadDir.FullName);

// 6. 儲存檔案(實際專案中建議重新命名避免衝突)
string savePath = Path.Combine(uploadDir.FullName, fileName);
FileUpload.SaveAs(savePath);

DirectoryInfo 進階操作範例


DirectoryInfo src = new DirectoryInfo(@"C:\abcd");
DirectoryInfo dst = new DirectoryInfo(@"C:\atest");
DirectoryInfo root = new DirectoryInfo(@"C:\");

if (!src.Exists) src.Create();
if (!dst.Exists) Directory.CreateDirectory(dst.FullName);
if (dst.Exists) dst.Delete(true); // 遞刪

src.MoveTo(dst.FullName); // 移動並重命名

// 列舉 C:\ 所有子目錄與檔案
foreach (var d in root.GetDirectories())
    Console.WriteLine(d.FullName);
foreach (var f in root.GetFiles())
    Console.WriteLine(f.FullName);

C磁碟子目錄列舉 執行前C磁碟 執行後C磁碟

二、FileStream 位元組串流:隨機存取的基石

1. 核心特性

  • 操作單位:位元組 與 位元組陣列
  • 內部維護檔案指標,支援隨機存取(Seek)
  • 適用二進位檔案、大檔案分塊讀寫、記憶體對應檔案
  • 建構函數多載豐富,支援 FileMode、FileAccess、FileShare 精細控制

2. 常用建構函數


// 基本
new FileStream(path, FileMode.Create);

// 完整控制
new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);

FileStream建構函數多載

3. 寫入位元組陣列範例


FileInfo fi = new FileInfo(@"C:\myfile.txt");
using (FileStream fs = new FileStream(fi.FullName, FileMode.Create))
{
    byte[] data = new byte[100000];
    new Random().NextBytes(data); // 產生隨機位元組
    foreach (byte b in data)
        fs.WriteByte(b); // 逐位元組寫入(教學用,實務用 Write(data, 0, data.Length))
}

4. FileAccess 權限控制

FileAccess允許操作
Read讀取
Write寫入
ReadWrite讀寫皆可

// 唯讀開啟
FileStream fs = new FileStream(@"C:\tab.txt", FileMode.OpenOrCreate, FileAccess.Read);

三、串流繼承體系與選擇指南

串流繼承結構

  • Stream:抽象基類,定義核心讀寫求、定位、長度等契約
  • FileStream:檔案實作
  • MemoryStream:記憶體緩衝區
  • NetworkStream:網路通訊
  • CryptoStream:加密/解密轉換
  • GZipStream/DeflateStream:壓縮
  • BufferedStream:為其他串流增加緩衝

四、Stream 核心成員速查

成員說明
Read(byte[], offset, count)讀取位元組到陣列,回傳實際讀取數
Write(byte[], offset, count)從陣列寫入位元組
Seek(offset, origin)移動指標位置
Position目前指標位置
Length串流長度
Flush()清除緩衝區寫入底層
Close() / Dispose()釋放資源
CanRead/CanWrite/CanSeek能力查詢

總結

Directory/DirectoryInfo 提供目錄結構操作能力,配合 FileStream 的位元組級隨機存取,構成 .NET 檔案系統操作的底層基礎。上層應用通常改用 StreamReader/Writer(文字)、BinaryReader/Writer(結構化二進位)、XmlSerializer/JsonSerializer(序列化)等更高階 API,但理解 FileStream 的指標、模式、共享機制,對排查效能、並發、大檔案處理問題至關重要。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved