Console.ReadLine(),无需按Enter

时间:2016-09-01 08:30:02

标签: c#

当我使用时:

string fileName = Console.ReadLine();

用户必须删除该项目,然后按Enter键。 我希望我的控制台应用程序的用户能够将文件拖放到控制台应用程序窗口中并获取该文件的名称,而无需每次丢弃项目时都按Enter键,因为他必须丢弃一堆项目

文件扩展名为.xlsx和.py。有没有办法让ReadLine在遇到这些子串时停止阅读?

3 个答案:

答案 0 :(得分:2)

使用Console.ReadKey()循环,提取返回的字符。

var filename = "";
do
{
    filename+= Console.ReadKey().KeyChar;

} while (!(filename.StartsWith("\"") && filename.EndsWith(".xlsx\"")) 
       && filename.EndsWith(".xlsx")); //continue with other extension

请注意结束双引号,因为如果有任何空格,您将获得包含文件名的引号。如果文件名中间有.xlsx,则会中断。

答案 1 :(得分:1)

据我所知,除了制作自己的GUI之外,没有真正好的解决方案。 C#控制台无法从文件丢弃接收事件,因为class View1 : View, INavigationWrapper {} class View2 : ContentView, INavigationWrapper {} // ContentView is a subclass of View class View3 : View var stack = new NavigationStackLayout(); stack.Add(new View1()); // this works stack.Add(new View2()); // this also works stack.Add(new View3()); // this fails at compile time 拥有该窗口而不是您的应用程序。

下一个解决方案在许多情况下都不会起作用,但如果只是测试非生产的功能我觉得这已经足够了。

csrss.exe

答案 2 :(得分:1)

我知道这样做的唯一方法是拖动程序的.exe文件中的文件,然后从args[]读取它们的名称(传递给main)并像加载它们一样加载它们使用C#中的任何文件。

其他方式是通过GUI,在这种情况下,您可以添加DragEventHandler个对象来处理拖动和放大放弃事件。 (还有数据)。