2016-07-08 57 views
2

我有一个我想要在控制台应用程序中打开的文本文件列表。带动态选项的控制台菜单

我想输出是这样的:

  1. List1.txt
  2. List2.txt
  3. List3.txt

一旦我得到这个输出我想要的是能够调用这些文件中的一个方法,并把它通过Console.ReadLine();

我目前在做什么开是

string[] FileNames = Directory.GetFiles(@"Itemized\", ".txt"); 
Console.WriteLine(String.Join(Environment.NewLine,FileNames));  

这可以让我尽可能让列表看起来像:

逐项\ List1.txt

逐项\ List2.txt

分项\ List3.txt

如果我知道该文件夹中的文件数,我可以硬编码,但我有问题的是,任意数量的文件可能存在。

因此,我现在正在寻找的是一种将缩放数值附加到每个文件并从其前面删除文件夹名称的方法。

我试过使用for循环来让它工作,但似乎无法让我的头围绕它。

回答

2

这里是东西干净和简单:

static void Main(string[] args) 
    { 
     string dirFolderPath = string.Format("{0}/{1}", Directory.GetCurrentDirectory(), "Itemized"); 
     DirectoryInfo dir = new DirectoryInfo(dirFolderPath); 

     if(!dir.Exists) 
     { 
      dir.Create(); 
     } 

     FileInfo[] files = dir.GetFiles("*.txt"); 

     for(int i = 0; i < files.Length; i++) 
     { 
      string line = string.Format("\n{0}-{1}", i, files[i].Name); 
      Console.WriteLine(line); 
     } 

     Console.ReadLine(); 
    } 
+0

这看起来惊人的测试它 – Spooler

+0

这完全是我在找的东西!非常感谢 :) – Spooler

3

尝试这样的事情

var fileNames = Directory.GetFiles(@"Itemized\", "*.txt").Select(Path.GetFileName).ToArray(); 
Console.WriteLine(string.Join(Environment.NewLine, fileNames)); 
+0

只有当我删除'的 “* .txt”'任何想法,为什么工作? 一切都显示为文本文件,当我删除它时,没有它们的列表形式。无论哪种方式,你帮我接近我想要的upvote – Spooler

+0

@Spooler对我来说它工作正常。在我的例子中唯一的问题是,你没有得到任何行号。为了达到这个目的,你必须使用for循环来输出'fileNames',就像@Ephraim所使用的那样。 – DestinatioN

+0

这就是为什么他得到了接受的答案,(显示了for循环来添加值)。 反正现在是时候让我想出如何为这个菜单提供用户交互 – Spooler