다중 폴더 디렉토리의 파일을 검색하는 데 Directory.GetFiles()
을 사용하고 있으며 일부 폴더가 너무 커서 검색에 최대 60 초가 걸릴 수 있습니다. 아래의 코드에서 사용자가 입력을 중지 한 후 검색이 잠시 시작됩니다.이 유형은 사용자가 파일 이름을 입력하고 입력하는 동안 일시 중지하지 않지만 단어 중간에 일시 중지하면 검색이 시작되고 그/그녀가 다시 타이핑을 시작하더라도 그것이 끝날 때까지 멈추지 말라.Directory.GetFiles 검색을 중지하는 방법이 있습니까
사용자가 입력하는 동안 검색을 중지하려면 inputFileName_TextChanged 메소드를 사용하십시오.
Directory.GetFiles
을 사용할 때 이미 시작된 검색을 중지 할 수있는 방법이 있습니까?
using System.Timers;
using System.IO;
namespace findFileTest
{
public partial class MainWindow : Window
{
Timer timer = new Timer();
public MainWindow()
{
InitializeComponent();
timer.Elapsed += new ElapsedEventHandler(TimerEvent);
timer.Interval = 1000;
timer.Enabled = true;
timer.Stop();
}
private void inputFileName_TextChanged(object sender, TextChangedEventArgs e)
{
// How to stop the search currently in process here
timer.Stop();
timer.Start();
}
public void TimerEvent(object source, ElapsedEventArgs e)
{
timer.Stop();
findFile();
}
private void findFile()
{
string fName = "";
this.Dispatcher.Invoke(() => {
fName = inputFileName.Text;
});
var fType = ".txt";
var fileName = fName.Trim() + fType;
var file = Directory.GetFiles(@"C:\TestFolder\", fileName, SearchOption.AllDirectories).FirstOrDefault();
if (file == null) {
Console.WriteLine("File not found");
}
else {
Console.WriteLine("Found:" + file);
}
}
}
}
잘못된 방법으로 Directory.EnumerateFiles()를 중지하는 것은 매우 쉽습니다. foreach 루프에서 벗어나기 만하면됩니다. –
먼저 귀하의 제안에 감사드립니다. 이걸 제대로 이해하면'.FirstOrDefault()'를 제거하고 내 검색 패턴을 * .txt *로 수정해야합니다. 그래서 .txt 확장자를 가진 모든 파일을 얻을 수 있습니다. 그런 다음 결과를 반복하기 위해'foreach '를 사용하십시오. 이것이 올바른 경우, 양쪽 모두가 경로 목록을 리턴하면, 하나는'IEnumerable'을 리턴하고 다른 하나는 다음과 같은 배열을 리턴합니다.'Directory.GetFile()'대신'Directory.EnumerateFiles()'를 사용하면 어떤 이점이 있습니까? 'string []'하지만 결국 양쪽 모두 멈출 수 있다고 생각합니다. 정말 다른 점은 무엇입니까? –
@ Peter Duniho는 이미 내 질문에 감사합니다. –