# C# File
csv、txt、圖片檔都差不多
將進行檔案一些讀取、寫入等等
結合開啟檔案更好用:[C#Form OpenFileDialog](/QCvjfRroTuK1lpDAzJTM-A)
>ChatGPT提供
[TOC]
## using
需要寫道這個,正常來說會自動寫到
```csharp=
using System.IO;
```
## 創建新文件 (Create)
會創建一個新的資料,如果資料就會覆蓋它
```csharp=
using System.IO;
string filePath = @"C:\path\to\your\file.txt";
// 創建一個文件,如果文件已經存在則會覆蓋
using (FileStream fs = File.Create(filePath))
{
// 在這裡你可以進行額外的文件處理
Console.WriteLine("File created successfully.");
}
```
```csharp=
string filePath = "test.txt"; // 檔案名稱
File.WriteAllText(filePath, "這是測試內容"); // 建立並寫入內容
Console.WriteLine("TXT 檔案已建立");
```
## 修改檔案名(Move)
```csharp=
string oldFileName = "test.txt"; //原檔案名稱
string newFileName = "new_test.txt"; //新檔案名稱
File.Move(oldFileName, newFileName);
Console.WriteLine("檔案已重新命名");
```
## 寫入文件 (Write)
將文字寫入文字,可以覆蓋所有或附加上文字
### 1. 使用 File.WriteAllText 寫入文本
```csharp=
using System.IO;
string filePath = @"C:\path\to\your\file.txt";
string content = "這是新寫入的內容。";
// 覆蓋文件內容
File.WriteAllText(filePath, content);
```
### 2. 使用 File.AppendAllText 附加內容
將文字追加在文檔最後,並不改變其遠本的文字
```csharp=
using System.IO;
string filePath = @"C:\path\to\your\file.txt";
string content = "這是追加的內容。";
// 在文件末尾附加文本
File.AppendAllText(filePath, content);
```
## 讀取文件 (Read)
可以讀取資料裡的文字
讀取檔案的內容,可以顯示於textBox、pictureBox、RichtextBox等等
textBox可以調整是否拖拉,這樣文字多的時候也可以看
RichtextBox可以調整顯示方式(全填滿等等)
### 1. 使用 File.ReadAllText 讀取整個文件內容
```csharp=
using System.IO;
string filePath = @"C:\path\to\your\file.txt";
// 讀取文件的所有內容
string content = File.ReadAllText(filePath);
Console.WriteLine(content);
```
### 2. 使用 File.ReadAllLines 讀取每行內容
將文件的每一行讀取為一個字符串數組。
```csharp=
using System.IO;
string filePath = @"C:\path\to\your\file.txt";
// 讀取文件的所有行
string[] lines = File.ReadAllLines(filePath);
foreach (string line in lines)
{
Console.WriteLine(line);
}
```
### 其他
| 用途 | 方法 | 適用檔案類型 |
|--------------|-------------------------------------|--------------------|
| 讀取檔案內容 | File.ReadAllText() | .txt, .csv, .json |
| 逐行讀取 | File.ReadAllLines() / StreamReader | .txt, .csv |
| 寫入 (覆蓋) | File.WriteAllText() | .txt, .csv, .json |
| 寫入 (追加) | File.AppendAllText() / StreamWriter(true) | .txt, .csv |
| 讀取 JSON | JsonSerializer.Deserialize<> | .json |
| 讀取 Word | Microsoft.Office.Interop.Word | .docx |
| 讀取 Excel | ClosedXML | .xlsx |
| 開啟應用程式 | Process.Start() | .exe, .txt, .pdf, .jpg |
* xlsx也可以在csv檔的後面加上
```csharp=
```
## 檢查文件是否存在 (Exists)
```csharp=
using System.IO;
string filePath = @"C:\path\to\your\file.txt";
// 檢查文件是否存在
if (File.Exists(filePath))
{
Console.WriteLine("文件存在");
}
else
{
Console.WriteLine("文件不存在");
}
```
## 刪除文件 (Delete)
只能刪除檔案,不能刪除檔案內的某一行內容
```csharp=
using System.IO;
string filePath = @"C:\path\to\your\file.txt";
// 刪除文件
if (File.Exists(filePath))
{
File.Delete(filePath);
Console.WriteLine("文件已刪除");
}
else
{
Console.WriteLine("文件不存在,無法刪除");
}
```
## 複製文件 (Copy)
文件從一個位置複製到另一個位置。
```csharp=
using System.IO;
string sourcePath = @"C:\path\to\your\file.txt";
string destPath = @"C:\path\to\destination\file.txt";
// 複製文件
File.Copy(sourcePath, destPath, overwrite: true);
```
## 移動文件 (Move)
將文件從一個位置移動到另一個位置。
```csharp=
using System.IO;
string sourcePath = @"C:\path\to\your\file.txt";
string destPath = @"C:\path\to\destination\file.txt";
// 移動文件
File.Move(sourcePath, destPath);
```
## 獲取文件信息 (FileInfo)
FileInfo 類提供了更多文件層級的操作,例如獲取文件大小、創建日期等。
```csharp=
using System.IO;
string filePath = @"C:\path\to\your\file.txt";
FileInfo fileInfo = new FileInfo(filePath);
// 獲取文件信息
Console.WriteLine($"文件大小: {fileInfo.Length} bytes");
Console.WriteLine($"創建日期: {fileInfo.CreationTime}");
```
## pictureBox 開啟照片
```csharp=
string filePath = ofd.FileName;
pictureBox1.Image = Image.FromFile(filePath);
```
## pictureBox 覆蓋原先檔案
我個人覺得第一種方法很好用
| 方法 | 適用情境 | 優點 |
|--------------------|------------------------------|----------------|
| File.WriteAllBytes() | 直接以位元組覆蓋圖片 | 簡單直接 |
| File.Copy() | 新舊圖片都是檔案 | 適合純粹取代 |
| Bitmap.Save() | 需要修改圖片內容 | 適合編輯後存回 |
```csharp=
File.WriteAllBytes(新檔位置, File.ReadAllBytes(舊檔位置));
File.Copy(新檔位置, 舊檔位置, true); //true 代表允許覆蓋
```
## 其他屬性
FileInfo fileInfo = new FileInfo(filePath);
創建 FileInfo 物件,取得檔案的詳細資訊。
* Name:檔案名稱(不包含路徑)。
* FullName:檔案的完整路徑。
* Length:檔案大小(單位:位元組)。
* CreationTime:檔案的建立時間。
* LastWriteTime:檔案的最後修改時間。
* LastAccessTime:檔案的最後存取時間。
## 修改顏色字體(跳出)
* 字體

```csharp=
using(FontDialog fd = new FontDialog())
{
if(fd.ShowDialog() == DialogResult.OK)
{
richTextBox1.Font = fd.Font;
}
}
```
* 顏色

```csharp=
using(ColorDialog cd = new ColorDialog())
{
if(cd.ShowDialog() == DialogResult.OK)
{
richTextBox1.ForeColor = cd.Color;
}
}
```