This commit is contained in:
2026-01-30 21:55:35 +08:00
commit 5b5684cd43
10 changed files with 1568 additions and 0 deletions

280
FileSystem.cs Normal file
View File

@@ -0,0 +1,280 @@
using System;
using System.Collections.Generic;
using System.IO;
namespace CMLeonOS
{
public class FileSystem
{
private string currentDirectory;
public FileSystem()
{
currentDirectory = @"0:\";
}
public string CurrentDirectory
{
get { return currentDirectory; }
}
public void ChangeDirectory(string path)
{
if (string.IsNullOrEmpty(path))
{
currentDirectory = @"0:\";
return;
}
string fullPath = GetFullPath(path);
try
{
if (Directory.Exists(fullPath))
{
currentDirectory = fullPath;
}
else
{
Console.WriteLine($"Directory not found: {path}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error changing directory: {ex.Message}");
}
}
public void MakeDirectory(string path)
{
string fullPath = GetFullPath(path);
try
{
if (!Directory.Exists(fullPath))
{
Directory.CreateDirectory(fullPath);
Console.WriteLine($"Directory created: {path}");
}
else
{
Console.WriteLine($"Directory already exists: {path}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error creating directory: {ex.Message}");
}
}
public void ListFiles(string path = ".")
{
string fullPath = GetFullPath(path);
try
{
if (Directory.Exists(fullPath))
{
// 列出当前目录下的文件和子目录
Console.WriteLine($"Contents of {path}:");
// 列出子目录
try
{
var dirs = Directory.GetDirectories(fullPath);
foreach (var dir in dirs)
{
// 使用Path.GetFileName获取目录名避免Substring可能导致的问题
string dirName = Path.GetFileName(dir);
Console.WriteLine($"[DIR] {dirName}");
}
}
catch
{
// 可能没有权限或其他错误
}
// 列出文件
try
{
var files = Directory.GetFiles(fullPath);
foreach (var file in files)
{
// 使用Path.GetFileName获取文件名避免Substring可能导致的问题
string fileName = Path.GetFileName(file);
Console.WriteLine($"[FILE] {fileName}");
}
}
catch
{
// 可能没有权限或其他错误
}
}
else
{
Console.WriteLine($"Directory not found: {path}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error listing files: {ex.Message}");
}
}
public void CreateFile(string path, string content = "")
{
string fullPath = GetFullPath(path);
try
{
// 创建或覆盖文件
File.WriteAllText(fullPath, content);
Console.WriteLine($"File created: {path}");
}
catch (Exception ex)
{
Console.WriteLine($"Error creating file: {ex.Message}");
}
}
public void WriteFile(string path, string content)
{
string fullPath = GetFullPath(path);
try
{
if (File.Exists(fullPath))
{
File.WriteAllText(fullPath, content);
Console.WriteLine($"File written: {path}");
}
else
{
Console.WriteLine($"File not found: {path}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error writing file: {ex.Message}");
}
}
public string ReadFile(string path)
{
string fullPath = GetFullPath(path);
try
{
if (File.Exists(fullPath))
{
return File.ReadAllText(fullPath);
}
else
{
Console.WriteLine($"File not found: {path}");
return "";
}
}
catch (Exception ex)
{
Console.WriteLine($"Error reading file: {ex.Message}");
return "";
}
}
public void DeleteFile(string path)
{
string fullPath = GetFullPath(path);
try
{
if (File.Exists(fullPath))
{
File.Delete(fullPath);
Console.WriteLine($"File deleted: {path}");
}
else
{
Console.WriteLine($"File not found: {path}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error deleting file: {ex.Message}");
}
}
public void DeleteDirectory(string path)
{
string fullPath = GetFullPath(path);
try
{
if (Directory.Exists(fullPath))
{
try
{
// 尝试删除目录
Directory.Delete(fullPath);
Console.WriteLine($"Directory deleted: {path}");
}
catch
{
// 目录可能不为空
Console.WriteLine($"Directory not empty: {path}");
}
}
else
{
Console.WriteLine($"Directory not found: {path}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error deleting directory: {ex.Message}");
}
}
private string GetFullPath(string path)
{
if (path.StartsWith(@"0:\"))
{
return path;
}
else if (path == ".")
{
return currentDirectory;
}
else if (path == "..")
{
if (currentDirectory == @"0:\")
{
return @"0:\";
}
else
{
int lastSlash = currentDirectory.LastIndexOf('\\');
if (lastSlash == 2) // 0:\
{
return @"0:\";
}
else
{
return currentDirectory.Substring(0, lastSlash);
}
}
}
else
{
if (currentDirectory == @"0:\")
{
return $@"0:\{path}";
}
else
{
return $@"{currentDirectory}\{path}";
}
}
}
}
}