我是 C# 新手,目前正在使用 COSMOS 为我的 OS 类制作一个简单的 FileSystem。目前我正在尝试实现一个“重新格式化”功能,当在控制台中输入“重新格式化”这个词时,操作系统(通过 QEMU 模拟)对磁盘进行分区。目前这是我的代码:
public static void console()
{
while (true)
{
Console.WriteLine("Console: ");
String input = Console.ReadLine();
if (input == "exit")
{
Cosmos.Sys.Deboot.ShutDown();
}
else if (input == "cpumem")
{
Console.WriteLine(Cosmos.Kernel.CPU.AmountOfMemory.ToString());
}
else if (input == "restart")
{
Cosmos.Sys.Deboot.Reboot();
}
else if (input == "devices")
{
var devices = Cosmos.Sys.FileSystem.Disk.Devices.ToArray();
}
else if (input == "reformat")
{
try
{
Partition part = null;
for (int j = 0; j < Cosmos.Hardware.BlockDevice.Devices.Count; j++)
{
if (Cosmos.Hardware.BlockDevice.Devices[j] is Partition)
{
part = (Partition)Cosmos.Hardware.BlockDevice.Devices[j];
}
}
var fs = new Cosmos.Sys.FileSystem.FAT32.FAT32(part);
uint cluster = 100;
fs.Format("newCluster", cluster);
}
catch
{
//Do Something warn user.
}
}
}
}
最重要的是这一点:
else if (input == "reformat")
{
try
{
Partition part = null;
for (int j = 0; j < Cosmos.Hardware.BlockDevice.Devices.Count; j++)
{
if (Cosmos.Hardware.BlockDevice.Devices[j] is Partition)
{
part = (Partition)Cosmos.Hardware.BlockDevice.Devices[j];
}
}
var fs = new Cosmos.Sys.FileSystem.FAT32.FAT32(part);
uint cluster = 100;
fs.Format("newCluster", cluster);
}
catch
{
//Do Something warn user.
}
}
这类似于位于此处的内容: http: //cosmos-tutorials.webs.com/atafat.html
但是,当我运行它时,我收到此错误:
我相信这是因为我缺少这条线:
Cosmos.System.Filesystem.FileSystem.AddMapping("C", FATFS);
FATFileList = FATFS.GetRoot();
位于上面的链接中。有没有其他的映射方式?还是我完全错过了什么?COSMOS 文档并没有真正说明太多,对于像我这样的初学者来说,源代码确实令人困惑,因为它没有任何关于函数如何工作或它们做什么的评论。我使用的是旧版本的 COSMOS(里程碑 4),因为它是唯一适用于 Visual Studio C# 2008 的版本。新版本仅在 Visual Studio C# 2010 中运行。