mirror of
https://github.com/Leonmmcoset/CMLeonOS.git
synced 2026-03-03 15:30:27 +00:00
update
This commit is contained in:
280
FileSystem.cs
Normal file
280
FileSystem.cs
Normal 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}";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user