Search code examples
c#console

Check if a file exists in directory


I am making an C# setup program that first checks for Terminal. However when I use File.Exists() it always returns false.

Is there a solution for this problem?

Code (minimal):

if (File.Exists(Directory.GetCurrentDirectory() + @"%LocalAppData%\Microsoft\WindowsApps\Microsoft.WindowsTerminal_8wekyb3d8bbwe\wt.exe"))
{
    WriteAtPosition(0, 29, "you have terminal! (gg)");
}
else
{
    WriteAtPosition(0, 29, "you no have terminal. (rip you)");
}

Code (full):

Console.Write("\u001b[48;2;255;255;255m\u001b[38;2;40;155;204m");
Console.WriteLine("      ░▒▒▒▒▒▒▒▒▒███████▒▒▒██▒▒▒▒▒▒▒▒▒▒▒█████████████████████████████████████▒█▒▒▒███████████████████████████████████████");
Console.WriteLine("       ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░▒▒▒▒█████████████████████████████████▒▒▒▒▒▒████████████████████████████████████████");
Console.WriteLine("        ░▒▒▒▒▒▒▒▒▒░▒▒▒░░░░░░░░░░░░░░░░▒▒░░░▒▒▒▒▒▒███████████████████████▒▒▒▒▒▒▒▒████████████████████████████████████████");
Console.WriteLine("         ░▒▒▒▒▒▒░░░░░````           ░░░░░░░░░░░░░░▒▒▒█████▒██████████████▒▒░░░░▒▒▒▒████████▒▒███████████████████████████");
Console.WriteLine("          ░░░░░░                     ░░░░░░░░░  '░░▒▒▒█▒▒▒██████████████▒░░    ░░░░▒▒████▒▒▒▒▒▒▒▒▒▒▒████████████████████");
Console.WriteLine("            `                        ░░░  ░░░░░    ░░░▒▒▒▒▒▒███████████▒▒░░░░    ░░░▒▒▒▒▒▒▒░░░▒▒▒▒▒█████████████████████");
Console.WriteLine("                                      ░░░''░░░░     ░░▒▒▒▒▒▒▒██████████▒▒▒▒▒░░░  ░░░░░░░▒▒▒▒▒▒░▒▒▒██████████████████████");
Console.WriteLine("                                                     ░░░░░░▒▒▒▒████████▒▒▒▒░░`    ░░░░░░░▒▒▒▒▒▒▒████████████████████████");
Console.WriteLine("                                                       ```░░░▒▒██▒▒▒▒▒▒▒▒▒░░░    ░░░░░░░▒▒▒▒▒▒▒█████████████████████████");
Console.WriteLine("░░                                                         ░░▒▒█▒▒░░░░░░░░    ░░░░░░░░░▒▒▒▒▒▒█████████████████████▒▒▒▒▒▒");
Console.WriteLine("░░░░░                                    ░░░              ░▒▒███▒▒▒░        ░░░░░░░░░░░░▒▒▒▒▒▒▒███████████████▒▒▒▒▒▒▒▒▒▒");
Console.WriteLine("░░░░░░                                 ░░▒▒▒░░░░         ░▒▒▒███▒▒░░         ░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒██████▒▒▒▒▒▒▒▒▒▒▒▒▒");
Console.WriteLine("░░░░░░░                               ░░░▒▒▒▒▒▒▒▒▒░░   .░▒▒▒██████▒░░      ░░░░░░░░░░░░░▒░░▒▒▒░▒▒▒▒████████▒▒▒▒▒░░░░▒▒▒▒");
Console.WriteLine(" '░░░░░                               ░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒███████████@▒▒▒░░░░░▒▒▒▒▒▒░░░▒▒▒▒▒▒▒▒▒▒▒▒▒█████████▒▒▒▒░░░░░░▒▒▒");
Console.WriteLine("                                  ░░░░░░ '░▒▒▒▒▒███████████████████████▒▒▒░░▒▒▒▒▒░░░░▒▒▒▒▒▒▒▒▒▒▒▒█████████▒▒▒▒▒░░░░░░▒▒▒");
Console.WriteLine("░       ░░░░░░                    ░░'     ░▒▒▒▒▒▒██████████████████████▒▒▒░▒▒▒▒▒░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒██████▒▒▒▒▒▒░░░▒▒▒▒▒▒▒");
Console.WriteLine("░░      ░░░░░░░░                            ░▒▒▒▒▒▒█████████████████████▒▒▒▒▒▒██▒▒▒▒▒▒██████▒▒▒▒▒▒████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒");
Console.WriteLine("░░░      ░░░░░░░░                             ░░▒▒▒▒▒▒▒██████████████████████████████████████▒████████████████████████▒▒");
Console.WriteLine("░░░      ░░░░░░░                                 '░░▒░░▒▒█████████████████████████████████████████████████████████████▒▒");
Console.WriteLine("░░░                                               ░░░░░░░▒██████████████████████████████████████████████████████████▒▒▒▒");
Console.WriteLine("░                  ░░░                               ░░░░▒▒▒▒██▒█████████████████████████████████████████████████▒▒▒▒▒▒▒");
Console.WriteLine("░            ░░░░░░░░░░░░░░░░░░░░░░░░░░░             ░░░░░▒▒████▒▒▒▒▒▒███████████████████████████████████████████▒▒▒▒▒▒▒");
Console.WriteLine("░░░ ░░░    ░░░░░░░░░░░▒▒▒▒░░░░░░░░▒▒▒░░░░░░░░░░    ░  ░ ░░░░▒▒▒▒░░░░░░░░░░░░░▒▒▒▒▒████████████████████████████████▒▒▒▒▒▒");
Console.WriteLine("░░     ░░░░░░░░░░░░▒▒▒▒▒▒▒▒░░░░░░░▒▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒▒███████████████████████████████████");
Console.WriteLine("░      ░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒░░░░░░░▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒▒▒██████████████████████████████▒▒▒");
Console.WriteLine("░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░▒░░░░░░░▒▒░░░░░░░▒▒▒▒██▒▒▒▒▒███████████████████████████");
Console.WriteLine("░░░░░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░▒▒▒▒▒▒░░░░░░▒▒▒▒░▒▒▒▒▒▒▒▒░░░░▒▒▒▒▒█████████████████████████████████");
Console.Write("\u001b[48;2;0;0;0m\u001b[38;2;255;255;255m");
// WriteAtPosition(0, 28, "████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████");
WriteAtPosition(0, 28, "██");
WriteAtPosition(0, 29, "Checking for Terminal...");
if (File.Exists(Directory.GetCurrentDirectory() + @"%LocalAppData%\Microsoft\WindowsApps\Microsoft.WindowsTerminal_8wekyb3d8bbwe\wt.exe"))
{
    WriteAtPosition(0, 29, "you have terminal! (gg)");
}
else
{
    WriteAtPosition(0, 29, "you no have terminal. (rip you)");
}
Thread.Sleep(10000);
static void WriteAtPosition(int left, int top, string text)
{
    Console.CursorLeft = left;
    Console.CursorTop = top;

    Console.WriteLine(text);
}


Solution

  • It is because that file doesn't exist, at least at the path you specified. Directory.GetCurrentDirectory() returns the absolute path to the current directory so appending @"%LocalAppData%\Microsoft\WindowsApps\Microsoft.WindowsTerminal_8wekyb3d8bbwe\wt.exe" to that path doesn't make sense.

    You just want to test if the file exists in your LocalAppData path. File.Exists doesn't work if you try to use that path however (it doesn't understand the %LocalAppData% wildcards), so you must first get the location of %LocalAppData% with Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) then concat the rest of the path you are looking for like so

    File.Exists(@$"{Environment.GetFolderPath( Environment.SpecialFolder.LocalApplicationData)}\Microsoft\WindowsApps\Microsoft.WindowsTerminal_8wekyb3d8bbwe\wt.exe")
    

    or better

    Path.Combine(Environment.GetFolderPath(
    Environment.SpecialFolder.ApplicationData), @"\Microsoft\WindowsApps\Microsoft.WindowsTerminal_8wekyb3d8bbwe\wt.exe");