static void Main(string[] args) { string utilisateur = "Néo"; string saisiUtilisateur = ""; // Initialisation du répertoire par défaut lors du démarrage de l'application File RepertoireCourant = new Directory("",null); // Affichage du texte lors du démarrage de l'application Console.WriteLine("Welcome to FileSystem called XUNIL"); Console.WriteLine("Write what you want to do when it\'s requested"); Console.WriteLine("If you want to close CMD window, please write : exit"); Console.WriteLine("Try to find the easter-egg. It's related to 'Matrix' \n"); while (saisiUtilisateur != "exit") { Console.Write(utilisateur +" "+RepertoireCourant.GetPath() + " $ "); saisiUtilisateur = Console.ReadLine(); string[] saisiDecoupe = saisiUtilisateur.Split(' '); // Permet de ranger chaque argument dans une case d'un tableau, permettant notamment de distinguer chaque commande // Chaque case fera appel à la commande saisi par l'utilisateur. Si la commande n'existe pas, un message d'erreur apparaitra, sinon la commande sera exécuté. switch (saisiDecoupe[0]) { case "cd": if (saisiDecoupe.Length == 1) { Console.WriteLine("Vous n'avez spécifié aucun fichier ou dossier à joindre."); } else { File file = RepertoireCourant.Cd(saisiDecoupe[1]); if (file != null) { RepertoireCourant = file; } else { Console.WriteLine("Aucun fichier ou dossier ne porte ce nom."); } } break; case "ls": String liste = ""; if (RepertoireCourant.CanRead()) { if (RepertoireCourant.IsDirectory()) { foreach (File f in ((Directory)RepertoireCourant).Ls()) { liste += f.GetPermissions(); liste += " " + f.Nom + "\n"; } } else { liste += RepertoireCourant.GetPermissions(); liste += " " + RepertoireCourant.Nom + "\n"; Console.WriteLine("C'est un fichier."); } }else { Console.WriteLine("Vous n'avez pas la permission de lire dans le répertoire " + RepertoireCourant.GetPath()); } Console.Write(liste); break; case "mkdir": if (saisiDecoupe.Length < 2) { Console.WriteLine("Commande incomplète."); } else { if (RepertoireCourant.CanWrite()) { if (saisiDecoupe[1] == string.Empty) { Console.WriteLine("Vous n'avez spécifié aucun nom de dossier."); } else { if (RepertoireCourant.IsDirectory()) { if (!((Directory)RepertoireCourant).Mkdir(saisiDecoupe[1])) { Console.WriteLine("Erreur lors de la création du dossier."); } else { Console.WriteLine("Dossier crée avec succès."); } } else if (RepertoireCourant.IsFile()) { Console.WriteLine("Vous ne pouvez pas créer de dossier dans un fichier."); } } }else { Console.WriteLine("Vous n'avez pas la permission d'écrire dans "+ RepertoireCourant.GetPath()); } } break; case "path": Console.WriteLine(RepertoireCourant.GetPath()); break; case "root": RepertoireCourant = RepertoireCourant.GetRoot(); break; case "rename": if (saisiDecoupe.Length < 3) { Console.WriteLine("Il manque un ou plusieurs arguments pour que le renommage s'effectue correctement."); } else { if (RepertoireCourant.CanWrite()) { bool renamed = false; foreach (File f in ((Directory)RepertoireCourant).Ls()) { if (f.GetName() == saisiDecoupe[1]) { renamed = f.RenameTo(saisiDecoupe[2]); break; } } if (renamed == false) { Console.WriteLine("Aucun fichier ou dossier ayant ce nom."); } } else { Console.WriteLine("Vous n'avez pas la permission de renommer " + saisiDecoupe[1] + "."); } } break; case "create": if (saisiDecoupe.Length < 2) { Console.WriteLine("Il manque le nom du fichier que vous voulez créer."); } else { if(RepertoireCourant.CanWrite()) { if (!((Directory)RepertoireCourant).createNewFile(saisiDecoupe[1])) // Le if exécute la méthode createNewFile et si la valeur // retourné est true; ça crée le fichier sinon ça affiche l'erreur { Console.WriteLine("Erreur lors de la création du fichier."); } else { Console.WriteLine("Fichier crée avec succès."); } }else { Console.WriteLine("Vous n'avez pas la permission d'écrire dans " + RepertoireCourant.GetPath()); } } break; case "parent": RepertoireCourant = RepertoireCourant.GetParent(); break; case "search": if (saisiDecoupe.Length < 2) { Console.WriteLine("Il manque l'argument pour que la commande soit exécuté."); } else { if (RepertoireCourant.CanRead()) { if (RepertoireCourant.IsDirectory()) { foreach (File result in ((Directory)RepertoireCourant).Search(saisiDecoupe[1])) { Console.WriteLine(result.GetPath()); } } else if (RepertoireCourant.IsFile()) { Console.WriteLine("Vous ne pouvez pas rechercher dans un fichier."); } } } break; case "file": if (RepertoireCourant.IsFile()) { Console.WriteLine("C'est un fichier."); } else { Console.WriteLine("Ce n'est pas un fichier."); } break; case "directory": if (RepertoireCourant.IsDirectory()) { Console.WriteLine("C'est un dossier."); } else { Console.WriteLine("Ce n'est pas un dossier."); } break; case "name": Console.WriteLine(RepertoireCourant.GetName()); break; case "delete": if (saisiDecoupe.Length < 2) { Console.WriteLine("Il n'y pas pas assez d'arguments dans votre commande."); } else { bool deleted = false; deleted = ((Directory)RepertoireCourant).Delete(saisiDecoupe[1]); if (!deleted) { Console.WriteLine("Aucun fichier ou dossier ayant ce nom."); } } break; case "chmod": if (saisiDecoupe.Length < 2 || saisiDecoupe.Length == 1) { Console.WriteLine("Il n'y pas pas assez d'arguments dans votre commande."); } else { RepertoireCourant.Chmod(int.Parse(saisiDecoupe[1])); } break; case "matrix": // Petit easter-egg sympatique :-) int aleatoire; Random r = new Random(); Console.WriteLine("Bienvenue dans la matrice de XUNIL. Ceci est un easter-egg totalement inutile et qui bloquera l'éxécutation de l'OS le plus abouti du monde."); for (int i = 5; i >= 0; i--) { Console.Write(i + "\r"); System.Threading.Thread.Sleep(1000); } Console.WriteLine(""); while (true) { aleatoire = r.Next(0, 2); Console.Write(aleatoire); } default: Console.WriteLine("Votre commande n'est pas reconnu par le système XUNIL."); break; } } }
public void GetPath() { Directory Test = new Directory("Test", RepertoireCourant); Directory Test1 = new Directory("Test1", Test); Assert.AreEqual("/" + Test.Nom + "/" + Test1.Nom + "/", Test1.GetPath()); }