public ChildProcess(string command) { Console.Clear(); try { Process process = new Process(); State.isWatching = false; var startInfo = new System.Diagnostics.ProcessStartInfo { WorkingDirectory = @State.currentPath, WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal, FileName = "cmd.exe", RedirectStandardInput = false, UseShellExecute = false, Arguments = "/C " + command, }; process.StartInfo = startInfo; process.Start(); process.WaitForExit(); } catch (Exception e) { Tools.DisplayError(e); } Console.Write("\n\n(Program "); Console.BackgroundColor = Console.ForegroundColor = ConsoleColor.Black; Console.BackgroundColor = ConsoleColor.Gray; Console.Write(command); Console.ResetColor(); Console.Write(" has exited)"); Console.ReadKey(true); State.isWatching = true; Console.Clear(); ConsoleDisplay.Display(); }
public void SearchMode() { ConsoleDisplay.ClearLine(Console.WindowTop); Console.SetCursorPosition(0, Console.WindowTop); Console.ForegroundColor = ConsoleColor.Blue; Console.Write(":/"); Console.ResetColor(); string pattern = Console.ReadLine(); for (int i = 0; i < ConsoleDisplay.files.Length; i++) { if (Path.GetFileName(ConsoleDisplay.files[i]).ToLower().Contains(pattern.ToLower())) { State.cursorPosY = i; break; } else if (i == ConsoleDisplay.files.Length - 1) { Tools.DisplayError(new Exception("Search returned no results")); } } Console.Clear(); ConsoleDisplay.Display(); }
private void WatcherChanged(object sender, FileSystemEventArgs e) { if (State.isWatching) { ConsoleDisplay.Display(); } }
public void DeleteFile(String file) { try { FileAttributes attr = File.GetAttributes(file); if ((attr & FileAttributes.Directory) != FileAttributes.Directory) { File.Delete(file); Console.WriteLine("Deleted: " + file); } else if ((attr & FileAttributes.Directory) == FileAttributes.Directory) { DeleteFolder(file); } else { ConsoleDisplay.Display(); } } catch (Exception e) { Tools.DisplayError(e); } }
public void NewFolder() { ConsoleDisplay.ClearLine(Console.WindowTop); Console.SetCursorPosition(0, Console.WindowTop); Console.Write("NEW folder: "); string file = Console.ReadLine(); if (file.IsEmpty()) { ConsoleDisplay.Display(); } else { try { if (!Directory.Exists(State.currentPath + Path.DirectorySeparatorChar + file)) { Directory.CreateDirectory(State.currentPath + Path.DirectorySeparatorChar + file); } else { throw new System.Exception("Directory " + file + " already exists!"); } } catch (Exception e) { Tools.DisplayError(e); } } }
private void WatcherDeletedFile(object sender, FileSystemEventArgs e) { if (State.isWatching) { State.selectedFile = null; ConsoleDisplay.Display(); } }
private void WatcherCreatedFile(object sender, FileSystemEventArgs e) { if (State.isWatching) { ConsoleDisplay.files = ConsoleDisplay.CombineArrays(State.currentPath); State.cursorPosY = Array.IndexOf(ConsoleDisplay.files, e.FullPath); State.selectedFile = e.FullPath; ConsoleDisplay.Display(); } }
//To be used on a catch block public static void DisplayError(Exception e) { ConsoleDisplay.ClearLine(Console.WindowTop); Console.SetCursorPosition(0, Console.WindowTop); Console.BackgroundColor = ConsoleColor.Red; Console.ForegroundColor = ConsoleColor.White; Console.Write("(!) " + e.Message); Console.ReadKey(true); Console.ResetColor(); ConsoleDisplay.ClearLine(Console.WindowTop); ConsoleDisplay.ClearLine(Console.WindowTop + 1); }
//Displays a new screen with file information public FileInfoScreen(String file) { State.activeScreen = (int)State.screens.INFO; Console.Clear(); Console.Write(new string( '=', Console.WindowWidth / 2 - 10 )); Console.Write(" File Information "); Console.Write(new string( '=', Console.WindowWidth / 2 - 10 )); Console.SetCursorPosition(0, 11); Console.Write(new string( '=', Console.WindowWidth )); Console.SetCursorPosition(0, 4); FileAttributes attr = File.GetAttributes(file); if ((attr & FileAttributes.Directory) == FileAttributes.Directory) { Console.SetCursorPosition(0, Console.WindowTop + 4); Console.WriteLine("{0,-21}{1,0}", " Directory Name: ", Path.GetFileName(file)); Console.WriteLine("{0,-21}{1,0}", " Full Path: ", file); Console.WriteLine("{0,-21}{1,0}", " Size: ", "Calculating..."); Thread fsThread = new Thread(() => { Tools.DisplayFolderSize(file); }); fsThread.Start(); Console.WriteLine("{0,-21}{1,0}", " Last Modified: ", Directory.GetLastWriteTime(file)); Console.WriteLine("{0,-21}{1,0}", " Created: ", Directory.GetCreationTime(file)); } else { Console.SetCursorPosition(0, Console.WindowTop + 4); Console.WriteLine("{0,-21}{1,0}", " File Name: ", Path.GetFileName(file)); Console.WriteLine("{0,-21}{1,0}", " Full Path: ", file); Console.WriteLine("{0,-21}{1,0}", " Size: ", "Calculating..."); Console.SetCursorPosition(0, Console.WindowTop + 6); string fileSize = Tools.DisplayFileSize(file); Console.WriteLine("{0,-21}{1,0}", " Size: ", fileSize + " \n"); Console.WriteLine("{0,-21}{1,0}", " Last Modified: ", File.GetLastWriteTime(file)); Console.WriteLine("{0,-21}{1,0}", " Created: ", File.GetCreationTime(file)); } Console.SetCursorPosition(0, 14); Console.WriteLine(" (c)opy full path to clipboard"); ConsoleKeyInfo key = Console.ReadKey(true); if (key.KeyChar == 'c') { Clipboard.SetData(DataFormats.Text, (Object)file); } ConsoleDisplay.Display(); }
public void Start() { while (!cancellationSignal) { if (State.windowHeight != Console.WindowHeight || State.windowWidth != Console.WindowWidth) { ConsoleDisplay.Display(); } State.windowWidth = Console.WindowWidth; State.windowHeight = Console.WindowHeight; Thread.Sleep(50); } cancellationSignal = false; }
public void JumpToLetter() { try { ConsoleDisplay.ClearLine(Console.WindowTop); Console.SetCursorPosition(0, Console.WindowTop); Console.ForegroundColor = ConsoleColor.DarkGray; Console.Write(":."); Console.ResetColor(); ConsoleKeyInfo keyInfo = Console.ReadKey(true); char key = keyInfo.KeyChar; if (key != State.currentFindKey) { State.findKeyMatches.Clear(); } bool hasKey; //iterate through directory and find files that start with key for (int i = 0; i < ConsoleDisplay.files.Length; i++) { hasKey = Path.GetFileName(ConsoleDisplay.files[i]).StartsWith(key.ToString(), StringComparison.InvariantCultureIgnoreCase); if (hasKey) { State.findKeyMatches.Add(i); } } State.cursorPosY = State.findKeyMatches[State.currentFindKeyPosition]; if (State.currentFindKeyPosition + 1 < State.findKeyMatches.Count) { State.currentFindKeyPosition++; } else { State.currentFindKeyPosition = 0; } Console.Clear(); ConsoleDisplay.Display(); } catch (Exception) { Tools.DisplayError(new Exception("Search returned no results")); } }
private void DeleteFolderWithPrompt(String folder) { IEnumerable <String> children = Directory.EnumerateFileSystemEntries(folder); if (Tools.IsEmpty(children)) { Directory.Delete(folder); if (State.cursorPosY > 0) { State.cursorPosY = State.cursorPosY - 1; } if (State.cursorPosY == 0) { State.selectedFile = State.currentPath; } } else { ConsoleDisplay.ClearLine(Console.WindowTop); Console.SetCursorPosition(0, Console.WindowTop); Console.Write("Folder "); Console.ForegroundColor = ConsoleColor.Black; Console.BackgroundColor = ConsoleColor.Gray; Console.Write(Path.GetFileName(folder)); Console.ResetColor(); Console.Write(" is not empty! Delete folder and its contents? (y?) "); ConsoleKeyInfo cki = Console.ReadKey(true); if (cki.KeyChar == 'y') { Console.Clear(); foreach (String child in children) { DeleteFile(child); } Directory.Delete(folder); Console.WriteLine("Deleted: " + folder); State.cursorPosY = 0; } else { ConsoleDisplay.Display(); } } }
public void DeleteFileWithPrompt(String file) { ConsoleDisplay.ClearLine(Console.WindowTop); Console.SetCursorPosition(0, Console.WindowTop); Console.Write("DELETE "); Console.ForegroundColor = ConsoleColor.Black; Console.BackgroundColor = ConsoleColor.Gray; Console.Write(Path.GetFileName(file)); Console.ResetColor(); Console.Write(" (y?)"); ConsoleKeyInfo cki = Console.ReadKey(true); try { FileAttributes attr = File.GetAttributes(file); if (cki.KeyChar == 'y') { if ((attr & FileAttributes.Directory) != FileAttributes.Directory) { Console.Clear(); State.selectedFile = null; File.Delete(file); Console.WriteLine("Deleted: " + file); if (State.cursorPosY > 0) { State.cursorPosY = State.cursorPosY - 1; } } else if ((attr & FileAttributes.Directory) == FileAttributes.Directory) { DeleteFolderWithPrompt(file); } } else { ConsoleDisplay.Display(); } } catch (Exception e) { Tools.DisplayError(e); } }
public static void DebugWindow() { Console.Clear(); Console.WriteLine("****DEBUG****\n\n"); Console.WriteLine("State.activeScreen: " + State.activeScreen + "\n"); Console.WriteLine("ConsoleDisplay.currentChunkFiles: "); for (int i = 0; i < ConsoleDisplay.currentChunkFiles.Length; i++) { Console.WriteLine(ConsoleDisplay.currentChunkFiles[i]); } Console.WriteLine("\nselectedFile: " + State.selectedFile); Console.WriteLine("\nState.CursorPosY: " + State.cursorPosY); Console.WriteLine("\nState.currentPath: " + State.currentPath); Console.WriteLine("\nState.currentFileChunk: " + State.currentFileChunk); Console.WriteLine("\nState.findKeyMatches"); State.findKeyMatches.ForEach((x) => Console.WriteLine(x)); Console.WriteLine("\nBuffers H - W"); Console.WriteLine(Console.BufferHeight + " - " + Console.BufferWidth); Console.ReadKey(true); ConsoleDisplay.Display(); }
public static void CopySelection(string item, bool moveDown) { if (!selectionRegister.Contains(item)) { selectionRegister.Add(item); ConsoleDisplay.RedrawSelectedFile(); //move down if possible if (State.cursorPosY < ConsoleDisplay.files.Length - 1 && moveDown) { State.cursorPosY++; ConsoleDisplay.MoveDown(); } Console.SetCursorPosition(0, Console.WindowTop); Console.Write("Added "); Console.ForegroundColor = ConsoleColor.Black; Console.BackgroundColor = ConsoleColor.Gray; Console.Write(Path.GetFileName(item)); Console.ResetColor(); Console.Write(" to Selection."); } }
public SelectionRegisterScreen() { Console.Clear(); Console.WriteLine("\n Current Selection:\n"); Console.WriteLine(" (c)lear list\n"); foreach (String item in Tools.selectionRegister) { Console.WriteLine(" " + item); } ConsoleKeyInfo cki = Console.ReadKey(true); if (cki.Key == ConsoleKey.C) { Tools.selectionRegister.Clear(); Console.Clear(); Console.WriteLine("\n Current Selection:\n"); Console.WriteLine(" (c)lear list\n"); Console.ReadKey(true); } ConsoleDisplay.Display(); }
public void NewFile() { ConsoleDisplay.ClearLine(Console.WindowTop); Console.SetCursorPosition(0, Console.WindowTop); Console.Write("NEW file: "); string file = Console.ReadLine(); file = State.currentPath + Path.DirectorySeparatorChar + file; try { if (file != String.Empty && !File.Exists(file)) { FileStream fs = File.Create(file); fs.Close(); } else if (File.Exists(State.currentPath + Path.DirectorySeparatorChar + file)) { ConsoleDisplay.ClearLine(Console.WindowTop); Console.SetCursorPosition(0, Console.WindowTop); Console.BackgroundColor = ConsoleColor.Red; Console.ForegroundColor = ConsoleColor.White; Console.Write("(!) File " + file + " already exists!"); Console.ResetColor(); Console.ReadKey(true); ConsoleDisplay.ClearLine(Console.WindowTop); ConsoleDisplay.ClearLine(Console.WindowTop + 1); } else { ConsoleDisplay.Display(); } } catch (Exception e) { Tools.DisplayError(e); } }
//renames 'file' in the argument list to 'line' public void RenameFile() { string file = State.selectedFile; string oldFile = file; ConsoleDisplay.ClearLine(Console.WindowTop); Console.SetCursorPosition(0, Console.WindowTop); Console.Write("RENAME to: "); string line = Console.ReadLine(); try { //Check if the file is a directory or not for File.Move() or Directory.Move() FileAttributes attr = File.GetAttributes(file); if ((attr & FileAttributes.Directory) != FileAttributes.Directory && line != String.Empty) { File.Move(file, State.currentPath + Path.DirectorySeparatorChar + line); } else if ((attr & FileAttributes.Directory) == FileAttributes.Directory && line != String.Empty) { Directory.Move(file, State.currentPath + Path.DirectorySeparatorChar + line); } else { ConsoleDisplay.Display(); } } catch (Exception e) { Tools.DisplayError(e); } while (!oldFile.Equals(file)) { Thread.Sleep(50); } }
static void Main(string[] args) { Console.Title = "FileScout"; File.WriteAllText(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + Path.DirectorySeparatorChar + "fileScoutDir", ""); //Watches window properties WindowProperties wp = new WindowProperties(); Thread windowPropertiesThread = new Thread(new ThreadStart(wp.Start)); if (args.Length > 0) { Console.WriteLine("Args: " + args[0]); if (Directory.Exists(args[0])) { State.currentPath = Path.GetFullPath(args[0]); } else { Console.WriteLine("Path does not exists."); return; } } else { State.currentPath = Directory.GetCurrentDirectory(); } //Watches for changes in filesystem and calls Display() when changes occur. new WatchFileSystem().CheckFiles(); //Handles console display, directory sorting, path shortening, etc. ConsoleDisplay.Display(); StartInputThread(); windowPropertiesThread.Start(); }
public void StartReading() { ConsoleKeyInfo consoleKeyInfo; do { //maybe this is a fix? It works so far leave it for a bit //string[] directoryArray = CombineArrays( ConsoleDisplay.currentPath ); string[] directoryArray = ConsoleDisplay.currentChunkFiles; if (!directoryArray.IsEmpty()) { State.selectedFile = directoryArray[State.cursorPosY]; } //Read key to change cursor consoleKeyInfo = Console.ReadKey(true); switch (consoleKeyInfo.Key) { case ConsoleKey.UpArrow: ConsoleDisplay.MoveUp(); ConsoleDisplay.Display(); break; case ConsoleKey.DownArrow: ConsoleDisplay.MoveDown(); ConsoleDisplay.Display(); break; case ConsoleKey.RightArrow: { //If it it's a folder allow press right key FileAttributes attr = File.GetAttributes(State.selectedFile); if ((attr & FileAttributes.Directory) == FileAttributes.Directory) { State.currentPath = State.selectedFile; History.SetPointer(); ConsoleDisplay.Display(); } else { AttemptOpenFile(); } } break; case ConsoleKey.LeftArrow: { History.AddEntry(); //Set cursor to Parent folder if (Directory.GetParent(State.currentPath) != null) { SetCursorToPreviousPosition(); State.currentPath = Directory.GetParent(State.currentPath).ToString(); } ConsoleDisplay.Display(); } break; } switch (consoleKeyInfo.KeyChar) { case 'k': ConsoleDisplay.MoveUp(); break; case 'j': ConsoleDisplay.MoveDown(); break; case 'l': { //If it it's a folder allow press right key FileAttributes attr = File.GetAttributes(State.selectedFile); if ((attr & FileAttributes.Directory) == FileAttributes.Directory) { State.currentPath = State.selectedFile; History.SetPointer(); ConsoleDisplay.Display(); } else { AttemptOpenFile(); } } break; case 'h': { History.AddEntry(); //Set cursor to Parent folder if (Directory.GetParent(State.currentPath) != null) { SetCursorToPreviousPosition(); State.currentPath = Directory.GetParent(State.currentPath).ToString(); } ConsoleDisplay.Display(); } break; case '\t': { Console.Clear(); Process process = new Process(); ProcessStartInfo startInfo = new ProcessStartInfo(); process.StartInfo = startInfo; startInfo.FileName = "cmd"; startInfo.UseShellExecute = true; startInfo.WorkingDirectory = State.currentPath; process.Start(); process.WaitForExit(); ConsoleDisplay.Display(); } break; case ':': { new InputBox().CommadMode(); } break; case '/': { new InputBox().SearchMode(); } break; case '.': { new InputBox().JumpToLetter(); } break; case '\r': { AttemptOpenFile(); } break; case 'r': { new InputBox().RenameFile(); } break; case 's': { new SelectionRegisterScreen(); } break; case 'n': { new InputBox().NewFile(); } break; case 'N': { new InputBox().NewFolder(); } break; case 'd': { if (State.selectedFile != State.currentPath) { State.isWatching = false; Console.Clear(); new InputBox().DeleteFileWithPrompt(State.selectedFile); Console.ReadKey(true); State.isWatching = true; ConsoleDisplay.Display(); } } break; case ' ': { //Tools.SelectMultiple(); //or //ConsoleDisplay.SelectMultpiple(): } break; case 'q': { Console.Clear(); File.WriteAllText(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + Path.DirectorySeparatorChar + "fileScoutDir", State.currentPath); Environment.Exit(0); } break; case 'b': { if (ConsoleDisplay.files.Length != 0) { State.cursorPosY = ConsoleDisplay.files.Length - 1; ConsoleDisplay.Display(); } } break; case 't': { State.cursorPosY = 0; ConsoleDisplay.Display(); } break; case 'i': { new FileInfoScreen(State.selectedFile); } break; case 'y': { if (Tools.selectionRegister.Contains(State.selectedFile)) { Tools.RemoveFromSelectionRegister(State.selectedFile); //move down if possible if (State.cursorPosY < ConsoleDisplay.files.Length - 1) { State.cursorPosY++; ConsoleDisplay.MoveDown(); } } else { Tools.CopySelection(State.selectedFile, true); } } break; case 'Y': { if (Tools.selectionRegister.Contains(State.currentPath)) { Tools.RemoveFromSelectionRegister(State.currentPath); Console.SetCursorPosition(0, Console.WindowTop); Console.Write("Removed "); Console.ForegroundColor = ConsoleColor.Black; Console.BackgroundColor = ConsoleColor.Gray; Console.Write(Path.GetFileName(State.currentPath)); Console.ResetColor(); Console.Write(" from Selection."); } else { Tools.CopySelection(State.currentPath, false); } } break; case 'p': { Tools.PasteSelection(); ConsoleDisplay.Display(); Console.ReadKey(true); } break; case 'z': { Tools.DebugWindow(); } break; } }while (consoleKeyInfo.Key != ConsoleKey.Escape); Console.Clear(); System.Environment.Exit(0); }
public ConsoleDisplayChild() { int originalTop = Console.WindowTop; for (int i = 0; i < Console.WindowHeight - 5; i++) { Console.SetCursorPosition(60, Console.WindowTop + 5 + i); Console.Write(new string( ' ', Console.WindowWidth - 64 )); } try { if (State.selectedFile != null) { FileAttributes attr = File.GetAttributes(State.selectedFile); if ((attr & FileAttributes.Directory) == FileAttributes.Directory) { childFiles = ConsoleDisplay.CombineArrays(State.selectedFile); for (int i = 0; i < childFiles.Length; i++) { Console.SetCursorPosition(60, Console.WindowTop + 5 + i); Console.Write("| "); if (i + 7 >= Console.WindowHeight) { Console.SetCursorPosition(66, Console.WindowTop + 5 + i); FileAttributes attrChild = File.GetAttributes(childFiles[i]); if ((attrChild & FileAttributes.Directory) == FileAttributes.Directory) { Console.Write(ConsoleDisplay.ShortenFileName("> " + Path.GetFileName(childFiles[i]), 26) + Path.DirectorySeparatorChar); } else { Console.Write(ConsoleDisplay.ShortenFileName(Path.GetFileName(childFiles[i]), 26)); } Console.SetCursorPosition(66, Console.WindowTop + 6 + i); Console.Write("..."); break; } else { Console.SetCursorPosition(66, Console.WindowTop + 5 + i); FileAttributes attrChild = File.GetAttributes(childFiles[i]); if ((attrChild & FileAttributes.Directory) == FileAttributes.Directory) { Console.Write(ConsoleDisplay.ShortenFileName("> " + Path.GetFileName(childFiles[i]), 26) + Path.DirectorySeparatorChar); } else { Console.Write(ConsoleDisplay.ShortenFileName(Path.GetFileName(childFiles[i]), 26)); } } } if (childFiles.Length == 0 && State.selectedFile != State.currentPath) { Console.SetCursorPosition(66, Console.WindowTop + 5); Console.Write("(empty)"); } } } } catch (UnauthorizedAccessException) { Console.SetCursorPosition(66, Console.WindowTop + 5); Console.Write("(Unauthorized access)"); } catch (FileNotFoundException e) { Tools.DisplayError(e); } Console.SetWindowPosition(0, originalTop); }
public static void RemoveFromSelectionRegister(string item) { selectionRegister.Remove(item); ConsoleDisplay.RedrawSelectedFile(); }
public void CommadMode() { Console.CursorVisible = true; ConsoleDisplay.ClearLine(Console.WindowTop); Console.SetCursorPosition(0, Console.WindowTop); Console.ForegroundColor = ConsoleColor.DarkYellow; Console.Write(":>"); Console.ResetColor(); string command = Console.ReadLine(); //Add all commands to an array if command isnt found display "Command Not Found" string[] commands = new string[] { "q", "c", "p", "x", "v", "preview" }; switch (command.ToLower()) { case "": break; case "q": { Console.Clear(); Environment.Exit(0); } break; case "c": { Console.Clear(); Process process = new Process(); process.StartInfo.FileName = "cmd"; process.StartInfo.UseShellExecute = true; process.StartInfo.WorkingDirectory = State.currentPath; process.Start(); ConsoleDisplay.Display(); } break; case "p": { Console.Clear(); Process process = new Process(); process.StartInfo.FileName = "powershell"; process.StartInfo.UseShellExecute = true; process.StartInfo.WorkingDirectory = State.currentPath; process.Start(); ConsoleDisplay.Display(); } break; case "x": { Console.Clear(); Process.Start(@State.currentPath); ConsoleDisplay.Display(); } break; case "v": { Console.Clear(); new About(); ConsoleDisplay.Display(); } break; case "m": { new FilePreview(); } break; default: { try { Console.SetBufferSize(Console.WindowWidth, 999); new ChildProcess(command); } catch (Exception e) { Tools.DisplayError(e); } } break; } ConsoleDisplay.ClearLine(Console.WindowTop); Console.CursorVisible = false; }