Запуск консольного приложения Visual Studio в среде IDE отличается от его запуска из командной строки. - PullRequest
0 голосов
/ 06 мая 2019

Я пишу консольное приложение ac #, которое отображает список элементов.Затем пользователь может перемещаться по элементам и экрану соответствующим образом, чтобы отобразить курсор.Это выполняется в среде IDE, и когда я дважды щелкаю встроенный .exe.Однако, когда я запускаю .exe через командную строку, все отображается неправильно.

    //Display Current Directory, files and folders and selected file
    public static void Display()
    {
        Console.Clear();

        Console.CursorVisible = false;
            //Sort and combine Directories and files
            files = CombineArrays( currentPath );

            Console.SetCursorPosition( 0, Console.WindowTop + 5 );
            //Output all files and folders
            for (int i = 0; i < files.Length; i++)
            {
                if (Cursor.cursorPosY == i)
                {
                    FileAttributes attr = File.GetAttributes( files[i] );
                    if ((attr & FileAttributes.Directory) == FileAttributes.Directory)
                    {
                        writer.WriteLine( " -> > " + ShortenFileName( Path.GetFileNameWithoutExtension( files[i] ), 26 ) + Path.GetExtension( files[i] ) + "\\" );
                    }
                    else
                    {
                        writer.WriteLine( " -> {0,-40}{1,16}", ShortenFileName( Path.GetFileNameWithoutExtension( files[i] ), 26 )
                            + Path.GetExtension( files[i] ), CalculateFileSize( files[i] ) );
                    }
                }
                else if (Cursor.cursorPosY != i)
                {
                    FileAttributes attr = File.GetAttributes( files[i] );
                    if ((attr & FileAttributes.Directory) == FileAttributes.Directory)
                    {
                        writer.WriteLine( "    > " + ShortenFileName( Path.GetFileNameWithoutExtension( files[i] ), 26 ) + Path.GetExtension( files[i] ) + "\\" );

                    }
                    else
                    {
                        writer.WriteLine( "    {0,-40}{1,16}", ShortenFileName( Path.GetFileNameWithoutExtension( files[i] ), 26 )
                            + Path.GetExtension( files[i] ), CalculateFileSize( files[i] ) );
                    }
                }
            }

        writer.Flush();
        Console.SetCursorPosition( 0, Cursor.cursorPosY );

        //Clear top of window and Write Current Directory
        ClearBlock( Console.WindowTop, Console.WindowTop + 5 );
        Console.SetCursorPosition( 0, Console.WindowTop );
        WriteCurrentPath();
    }

-> Ожидаемое поведение

-> Вызов fileScout из командной строки

В каталогах, где количество файлов не заполняет окно за пределами высоты, оно отображается правильно.Однако, когда список становится больше, чем высота окна, все отображается неправильно, и курсор ведет себя странно.

Это происходит только при вызове приложения из командной строки.Не при двойном щелчке по нему или при запуске его через IDE (что аналогично двойному щелчку).

Почему консольное приложение, предназначенное для запуска в терминале, будет вести себя иначе, чем вызывать его изфактический терминал для запуска его из проводника файлов?

Проблема одинакова для powershell.Я также только что понял, что это работает правильно на ConEmu, эмулирующем cmd или powershell.Таким образом, проблема возникает только в vanilla powershell и командной строке.

РЕДАКТИРОВАТЬ: Я также только что понял, проблема в том, что когда я вызываю Console.SetCursorPosition (...), он работает в IDE, но не в командной строке.Я подозреваю, что причиной того, что курсор не меняется, является виновник.

...