私は C# が初めてで、現在 COSMOS を使用して OS クラス用の単純なファイルシステムを作成しています。現在、「再フォーマット」という単語がコンソールに入力されると、OS(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 のドキュメンテーションは実際にはあまり多くを語っていません。ソース コードは、関数がどのように機能するか、または何をするかについてのコメントがまったくないため、私のような初心者にとっては正直わかりにくいものです。Visual Studio C# 2008 で動作する唯一の COSMOS (Milestone 4) の古いバージョンを使用しています。新しいバージョンは Visual Studio C# 2010 でのみ動作します。