using System;
using System.Collections.Generic;
using Cosmos.System.Filesystem;
namespace MyOS
{
public static class FileSystem
{
private static Dictionary<string, string> files = new Dictionary<string, string>();
private static readonly string DiskFileName = "MyOSDisk.txt";
public static void Initialize()
{
if (File.Exists(DiskFileName))
{
string[] lines = File.ReadAllLines(DiskFileName);
foreach (string line in lines)
{
int separatorIndex = line.IndexOf(":");
if (separatorIndex != -1)
{
string filePath = line.Substring(0, separatorIndex);
string fileContent = line.Substring(separatorIndex + 1);
files.Add(filePath, fileContent);
}
}
}
}
public static void CreateFile(string filePath, string content)
{
files.Add(filePath, content);
SaveToDisk(filePath, content);
}
public static bool FileExists(string filePath)
{
return files.ContainsKey(filePath);
}
public static string ReadFile(string filePath)
{
if (Cache.IsCached(filePath))
{
return Cache.GetDataFromCache(filePath);
}
if (files.TryGetValue(filePath, out string content))
{
Cache.AddToCache(filePath, content);
return content;
}
return "File not found.";
}
public static void WriteFile(string filePath, string newContent)
{
if (FileExists(filePath))
{
files[filePath] = newContent;
Cache.AddToCache(filePath, newContent);
SaveToDisk(filePath, newContent);
}
}
private static void SaveToDisk(string filePath, string content)
{
if (File.Exists(DiskFileName))
{
string fileData = filePath + ":" + content;
File.AppendAllText(DiskFileName, fileData + Environment.NewLine);
}
else
{
File.WriteAllText(DiskFileName, filePath + ":" + content + Environment.NewLine);
}
}
}
}
Sys.FileSystem.CosmosVFS fs = new Cosmos.FileSystem.CosmosVFS();
Sys.FileSystem.VFS.VFSManager.RegisterVFS(fs);
var available_space = fs.GetAvailableFreeSpace(@"0:\");
Console.WriteLine("Kullanilabilir alan: " + available_space);
var fs_type = fs.GetFileSystemType(@"0:\");
Console.WriteLine("Dosya sistemi tipi: " + fs_type);
try
{
Directory.Create(@"0:\testing\");
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
try
{
var file_stream = File.Create(@"0:\testing.txt");
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
try
{
File.Delete(@"0:\testing.txt");
Directory.Delete(@"0:\testing\");
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Sys.FileSystem.CosmosVFS fs = new Cosmos.FileSystem.CosmosVFS();
Sys.FileSystem.VFS.VFSManager.RegisterVFS(fs);
var available_space = fs.GetAvailableFreeSpace(@"0:\");
Console.WriteLine("Kullanilabilir alan: " + available_space);
var fs_type = fs.GetFileSystemType(@"0:\");
Console.WriteLine("Dosya sistemi tipi: " + fs_type);
try
{
Directory.Create(@"0:\testing\");
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
try
{
var file_stream = File.Create(@"0:\testing.txt");
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
try
{
File.Delete(@"0:\testing.txt");
Directory.Delete(@"0:\testing\");
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Aslında teknik olarak BeforeRun() ve Run() komutlarını silmedim. Ben FileSystem adı altında public bir class oluşturmuştum. Benim hatam yapay zekaya fazla güvenmek oldu. Verdiğiniz kodlar için teşekkür ederim. Umarım işletim sisteminizde sizde başarılı olursunuz. Benim oluşturduğum kodlarıda vereyim ihtiyacı olan olur.Merhabalar, bir dosya sistemi eklemek için BeforeRun() fonksiyonunun içineveKod:Sys.FileSystem.CosmosVFS fs = new Cosmos.FileSystem.CosmosVFS();
Kodlarını eklemeniz gerekmektedir.Kod:Sys.FileSystem.VFS.VFSManager.RegisterVFS(fs);
Komutu ile diskteki kullanılabilir alanı;Kod:var available_space = fs.GetAvailableFreeSpace(@"0:\"); Console.WriteLine("Kullanilabilir alan: " + available_space);
Komutu ile dosya sistemi tipini (muhtemelen FAT32) görebilirsiniz. Ayrıca,Kod:var fs_type = fs.GetFileSystemType(@"0:\"); Console.WriteLine("Dosya sistemi tipi: " + fs_type);
Komutu ile bir dizin oluşturabilir.Kod:try { Directory.Create(@"0:\testing\"); } catch (Exception e) { Console.WriteLine(e.ToString()); }
Komutuyla dosya oluşturabilir (dizini değiştirebilirsiniz) ve,Kod:try { var file_stream = File.Create(@"0:\testing.txt"); } catch (Exception e) { Console.WriteLine(e.ToString()); }
Komutu ile bir dizini veya dosyayı silebilirsiniz. Bu arada gördüğüm kadarıyla yeni bir Cosmos çözümü oluşturduğunuzda kendiliğinden gelen foksiyonları (Run(), BeforeRun() vs.) silmişsiniz. Verdiğim kodları yeni bir proje oluşturup yazın ve fonksiyonların içindeki kendiliğinden gelen kodlar hariç hiçbir şeyi silmeyin. Grafik konusu içinse Cosmos üzerinden grafik eklemek gerçekten çok zor herkesin yapabileceği bir şey değil ki ben de yapamıyorumKod:try { File.Delete(@"0:\testing.txt"); Directory.Delete(@"0:\testing\"); } catch (Exception e) { Console.WriteLine(e.ToString()); }
O yüzden ilk önce konsol modunda alıştırma yapmanızı öneririm. Umarım yardımcı olmuşumdur.
Cosmos ile işletim sistemi yapmanı tavsiye etmiyorum, osdev wikisini takip ederek C ile yapman daha yararlı.Aslında teknik olarak BeforeRun() ve Run() komutlarını silmedim. Ben FileSystem adı altında public bir class oluşturmuştum. Benim hatam yapay zekaya fazla güvenmek oldu. Verdiğiniz kodlar için teşekkür ederim. Umarım işletim sisteminizde sizde başarılı olursunuz. Benim oluşturduğum kodlarıda vereyim ihtiyacı olan olur.
CosmosVFS VFS;
this.VFS = new CosmosVFS();
Sys.FileSystem.VFS.VFSManager.RegisterVFS(VFS);
using Sys = Cosmos.System;
public class ClassName { }
public static string CreateDirectory(string DirectoryPath)
{
if (!Sys.FileSystem.VFS.VFSManager.DirectoryExists(DirectoryPath))
{
int index = 0;
foreach (char Char in DirectoryPath)
{
index = index + 1;
if (Char == '\\')
{
if (!Sys.FileSystem.VFS.VFSManager.DirectoryExists(DirectoryPath.Substring(0, index)))
{
if (DirectoryPath.Substring(1, index) != @":\")
{
try
{
Sys.FileSystem.VFS.VFSManager.CreateDirectory(DirectoryPath.Substring(0, index));
}
catch (Exception ex)
{
return $"Exception : {ex.Message}";
}
}
}
}
}
return $"Klasör oluşturuldu : {DirectoryPath}";
}
else
{
return "Exception : Directory already exist";
}
}
public static string DelDir(string path, bool recursive)
{
string Return = "Unknow Error";
try
{
if (VFSManager.DirectoryExists(path))
{
VFSManager.DeleteDirectory(path, recursive);
Return = $"Directory {path} was successfully deleted.";
}
else
{
Return = $"Directory '{path}' not found!";
}
}
catch (Exception ex)
{
Return = "Exception : " + ex.Message;
}
return Return;
}
public static string dir(string path)
{
string Return = "Exception : Unknow Error";
try
{
if (VFSManager.DirectoryExists(path))
{
var directoryListing = VFSManager.GetDirectoryListing(path);
Return = Return + $"Directory of {path}\n";
foreach (var entry in directoryListing)
{
if (entry.mEntryType is DirectoryEntryTypeEnum.Directory)
{
Return = Return + $"[Directory] {entry.mName}";
}
else if (entry.mEntryType is DirectoryEntryTypeEnum.File)
{
Return = Return + $"[{entry.mEntryType}]{entry.mName}";
}
else
{
Return = Return + $"[Unknow]{entry.mName}";
}
}
}
else
{
Return = $"Directory '{path}' not found!";
}
}
catch (Exception ex)
{
Return = "Exception : "+ex.Message;
}
return Return;
}
using Cosmos.System.FileSystem.Listing;
using Cosmos.System.FileSystem.VFS;
public static string MoveFolder(string sourcePath, string destinationPath)
{
string result = "Exception: Unknow Error";
try
{
if (VFSManager.DirectoryExists(sourcePath))
{
if (!VFSManager.DirectoryExists(destinationPath))
{
// Klasörü taşıma işlemi
VFSManager.CreateDirectory(destinationPath);
var sourceDirectoryListing = VFSManager.GetDirectoryListing(sourcePath);
foreach (var entry in sourceDirectoryListing)
{
if (entry.mEntryType is DirectoryEntryTypeEnum.Directory)
{
string newDestinationPath = System.IO.Path.Combine(destinationPath, entry.mName);
MoveFolder(entry.mFullPath, newDestinationPath);
}
else if (entry.mEntryType is DirectoryEntryTypeEnum.File)
{
string destinationFilePath = System.IO.Path.Combine(destinationPath, entry.mName);
var sourceStream = VFSManager.GetFile(entry.mFullPath).GetFileStream();
var destinationStream = VFSManager.CreateFile(destinationFilePath).GetFileStream();
byte[] buffer = new byte[8192]; // 8 KB buffer boyutu
int bytesRead;
do
{
bytesRead = sourceStream.Read(buffer, 0, buffer.Length);
destinationStream.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
sourceStream.Close();
destinationStream.Close();
}
}
// Kaynak klasörü sil
VFSManager.DeleteDirectory(sourcePath, true);
result = $"Folder moved successfully! {sourcePath} --> {destinationPath}";
}
else
{
result = "Destination folder already exists!";
}
}
else
{
result = $"Source directory '{sourcePath}' not found!";
}
}
catch (Exception ex)
{
result = "Exception: " + ex.Message;
}
return result;
}
using Cosmos.System.FileSystem.Listing;
using Cosmos.System.FileSystem.VFS;
public static List<string> SearchFolders(string directoryPath, string keyword)
{
List<string> resultFolders = new List<string>();
resultFolders.Add("Exception : Unknow Error");
try
{
resultFolders.Clear();
if (VFSManager.DirectoryExists(directoryPath))
{
var directoryListing = VFSManager.GetDirectoryListing(directoryPath);
foreach (var entry in directoryListing)
{
if (entry.mEntryType is DirectoryEntryTypeEnum.Directory && entry.mName.Contains(keyword))
{
resultFolders.Add(entry.mName);
}
resultFolders.AddRange(SearchFolders(entry.mFullPath, keyword));
}
}
else
{
resultFolders.Clear();
resultFolders.Add($"Directory '{directoryPath}' not found!");
}
}
catch (Exception ex)
{
resultFolders.Clear();
resultFolders.Add("Exception: " + ex.Message);
}
return resultFolders;
}
using Cosmos.System.FileSystem.Listing;
using Cosmos.System.FileSystem.VFS;
public static string CopyFolder(string sourcePath, string destinationPath)
{
string Return = "Exception : Unknow Error";
try
{
if (VFSManager.DirectoryExists(sourcePath))
{
if (!VFSManager.DirectoryExists(destinationPath))
{
VFSManager.CreateDirectory(destinationPath);
}
else
{
int Directory = 1;
while (VFSManager.DirectoryExists(destinationPath+" ("+Directory+")"))
{
Directory++;
}
VFSManager.CreateDirectory(destinationPath + " (" + Directory + ")");
}
var sourceDirectoryListing = VFSManager.GetDirectoryListing(sourcePath);
foreach (var entry in sourceDirectoryListing)
{
if (entry.mEntryType is DirectoryEntryTypeEnum.Directory)
{
string newDestinationPath = System.IO.Path.Combine(destinationPath, entry.mName);
CopyFolder(entry.mFullPath, newDestinationPath);
}
else if (entry.mEntryType is DirectoryEntryTypeEnum.File)
{
string destinationFilePath = System.IO.Path.Combine(destinationPath, entry.mName);
var sourceStream = VFSManager.GetFile(entry.mFullPath).GetFileStream();
var destinationStream = VFSManager.CreateFile(destinationFilePath).GetFileStream();
byte[] buffer = new byte[entry.mSize];
int bytesRead;
do
{
bytesRead = sourceStream.Read(buffer, 0, buffer.Length);
destinationStream.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
sourceStream.Close();
destinationStream.Close();
}
}
Return = $"Destination folder copied successfully! {sourcePath} ---> {destinationPath}";
}
else
{
Return = $"Source directory '{sourcePath}' not found!";
}
}
catch (Exception ex)
{
Return = "Exception : " + ex.Message;
}
return Return;
}
using Cosmos.System.FileSystem.VFS;
using Cosmos.System.FileSystem.Listing;
public static string copyFile(string sourcePath, string destinationPath)
{
string Return = "Exception : Unknow Error";
try
{
if (!VFSManager.FileExists(sourcePath))
{
Return = $"Source file '{sourcePath}' not found!";
}
else
{
if (VFSManager.FileExists(destinationPath))
{
Return = $"Destination file '{destinationPath}' already exists!";
}
else
{
var sourceFile = VFSManager.GetFile(sourcePath);
var destinationFile = VFSManager.CreateFile(destinationPath);
byte[] buffer = new byte[sourceFile.mSize];
using (var sourceStream = sourceFile.GetFileStream())
using (var destinationStream = destinationFile.GetFileStream())
{
int bytesRead = sourceStream.Read(buffer, 0, buffer.Length);
destinationStream.Write(buffer, 0, bytesRead);
}
Return = $"File '{sourcePath}' successfully copied to '{destinationPath}'";
}
}
}
catch (Exception ex)
{
Return = "Exception : " + ex.Message;
}
return Return;
}
using Cosmos.System.FileSystem.VFS;
public static string createFile(string filePath,string DirectoryPath)
{
if (!Sys.FileSystem.VFS.VFSManager.FileExists(filePath))
{
if (!Sys.FileSystem.VFS.VFSManager.DirectoryExists(DirectoryPath))
{
int index=0;
foreach(char Char in DirectoryPath)
{
index=index+1;
if (Char == '\\')
{
if(!Sys.FileSystem.VFS.VFSManager.DirectoryExists(DirectoryPath.Substring(0, index)))
{
if(DirectoryPath.Substring(1, index)!=@":\")
{
CreateDir.CreateDirectory(DirectoryPath.Substring(0, index));
}
}
}
}
}
try
{
Sys.FileSystem.VFS.VFSManager.CreateFile(filePath);
return $"Dosya Oluşturuldu \\ {filePath}";
}
catch (Exception ex)
{
return $"Exception : {ex.Message}";
}
}
else
{
return "Exception : File already exists";
}
}
using FileSystem.API_s.Dir;
public static string DelFile(string path)
{
string Return = "Exception : Unknow Error";
try
{
if (VFSManager.FileExists(path))
{
VFSManager.DeleteFile(path);
Return = $"File {path} was successfully deleted.";
}
else
{
Return = $"File '{path}' not found!";
}
}
catch (Exception ex)
{
Return = "Exception : " + ex.Message;
}
return Return;
}
using Cosmos.System.FileSystem.VFS;
public static string moveFile(string sourceFilePath, string destinationFilePath)
{
string result = "Exception: Unknow Error";
try
{
if (VFSManager.FileExists(sourceFilePath))
{
if (!VFSManager.FileExists(destinationFilePath))
{
// Dosyayı kopyala
var sourceFile = VFSManager.GetFile(sourceFilePath);
var destinationFile = VFSManager.CreateFile(destinationFilePath).GetFileStream();
byte[] buffer = new byte[sourceFile.mSize];
int bytesRead;
do
{
bytesRead = sourceFile.GetFileStream().Read(buffer, 0, buffer.Length);
destinationFile.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
sourceFile.GetFileStream().Close();
destinationFile.Close();
// Kaynak dosyayı sil
VFSManager.DeleteFile(sourceFilePath);
result = $"File moved successfully! {sourceFilePath} --> {destinationFilePath}";
}
else
{
result = "Destination file already exists!";
}
}
else
{
result = $"Source file '{sourceFilePath}' not found!";
}
}
catch (Exception ex)
{
result = "Exception: " + ex.Message;
}
return result;
}
using Cosmos.System.FileSystem.VFS;
public static string readFile(string filePath)
{
string content = string.Empty;
try
{
if (VFSManager.FileExists(filePath))
{
var file = VFSManager.GetFile(filePath);
var fileStream = file.GetFileStream();
using (var reader = new System.IO.StreamReader(fileStream))
{
content = reader.ReadToEnd();
}
fileStream.Close();
}
else
{
content = $"File '{filePath}' not found!";
}
}
catch (Exception ex)
{
content = "Exception: " + ex.Message;
}
return content;
}
using Cosmos.System.FileSystem.VFS;
public static string writeFile(string filePath, string content)
{
string Result = "Exception : Unknow Error";
try
{
var fileStream = VFSManager.CreateFile(filePath).GetFileStream();
using (var writer = new System.IO.StreamWriter(fileStream))
{
writer.Write(content);
}
fileStream.Close();
Result = $"data has been successfully written into the file.";
}
catch (Exception ex)
{
Result = "Exception: " + ex.Message;
}
return Result;
}
using Cosmos.System.FileSystem.VFS;
Rica ederimAslında teknik olarak BeforeRun() ve Run() komutlarını silmedim. Ben FileSystem adı altında public bir class oluşturmuştum. Benim hatam yapay zekaya fazla güvenmek oldu. Verdiğiniz kodlar için teşekkür ederim. Umarım işletim sisteminizde sizde başarılı olursunuz. Benim oluşturduğum kodlarıda vereyim ihtiyacı olan olur.
Rica ederimBu arada dosya sistemi pek stabil değil eften püften şeylerden hata verebiliyor, bir problem olursa yeni konu açarsınız yardımcı olmaya çalışırım.
2'dir bana C öğrenmemi söylüyorsun. Ben hobi olarak yapıyorum yazılım işini. Cosmos Tool ile fazla ilerlenemeyeceğini de biliyorum. Ben WinForm'dan sıkıldığım için Cosmos ile uğraşıyorum. Ayrıca Cosmos ile anlamadığım şeyleri de anlamaya başladım. 15 yaşındaki birisi için gayet eğlenceli geçiyor.Yazdığım şeylere beğenmeme atıyorsunuz ama Cosmos adlı tool ile işletim sistemi yazmanızın size katkısı yok, en azından düz C ve Assembly ile kernel yazmak kadar yok. Tercih sizin ne diyeyim..
Peki siz bilirsiniz, en azından ne demek istediğimi anlamışsınız. Ayrıca ben sana spesifik bir dili öğrenmeni kastetmemiştim C öğren derken, sadece high level bir dil ile yapacağın OS'in size çok bir şey katmayacağını dile getirmeye çalışmıştım. Yaşınız umrumda değil. Kolay gelsin.2'dir bana C öğrenmemi söylüyorsun. Ben hobi olarak yapıyorum yazılım işini. Cosmos Tool ile fazla ilerlenemeyeceğini de biliyorum. Ben WinForm'dan sıkıldığım için Cosmos ile uğraşıyorum. Ayrıca Cosmos ile anlamadığım şeyleri de anlamaya başladım. 15 yaşındaki birisi için gayet eğlenceli geçiyor.