2013-02-04 94 views
2

如果有人能幫忙,我會很感激。如何在控制檯C#中清除以前的數據?

進出口呈現在控制檯中堆棧的所有驅動器:

public void ShowDrives() 
    { 
     foreach (FileSystemInfo f in stack) 
      Console.WriteLine(f); 
    } 

Output: 
C:\ 
E:\ 

而現在,當我按下左箭頭鍵,我調用另一個方法,它顯示了特定的驅動器內的目錄,並且將該數據寫入到相同的堆棧

public void ShowFiles(DirectoryInfo dif) 
    { 
      stack.Clear(); 
      foreach (FileSystemInfo f in dif.GetFileSystemInfos()) 
      {...} //show all files and directories and Write all inside the stack 
    } 

但我以前的驅動器輸出保持在控制檯上,我需要以某種方式將其刪除,並顯示堆棧的新數據。

Output: 
C:\ 
E:\ 
C:\file1.doc 
C:\folder 
etc... 

,我需要得到的只有

C:\file1.doc 
C:\folder 
etc... 

它不允許使用Console.Clear() 我很感謝任何幫助!

+2

如果它不能使用一個明確的方法,你實際上是在尋找一種方式來移動光標有關屏幕? – ChiefTwoPencils

+0

是的,我可以移動光標位置,但我需要刪除以前的輸出 –

+0

謝謝,它的作品:) –

回答

0

您是否想完全清除控制檯?

Console.Clear(); 

...或者你只是想覆蓋某些行?

+0

某些行,我的意思是我需要顯示堆棧的新內容,我不允許使用Console.Clear(); –

0

您可以將光標移至Console.SetCursorPosition所需的行,並簡單地用Console.WriteConsole.WriteLine覆蓋該行的內容。

但是,您應該記住,如果前一個輸出的行數較多,或者某些前一個輸出行比後一行的相應行更長,則可能會將先前的輸出保留爲...

我可以建議的唯一的事情就是記住所有那些長度和覆蓋等垃圾與空間:

string oldoutput = "123"; 
Console.Write(oldoutput); 
Console.ReadLine(); 

string newoutput = "!"; 
Console.SetCursorPosition(0, Console.CursorTop - 1); 
Console.Write(newoutput); 

int delta = oldoutput.Length - newoutput.Length; 
if (delta > 0) 
{ 
    for (int i = 0; i < delta; i++) 
     Console.Write(" "); 
} 

Console.ReadLine();