2013-01-15 4 views
0

나는 지정된 소스 디렉토리의 파일 이름에서 문자열을 검색하는의 WinForm 응용 프로그램을 개발하고 있어요 액세스 .. 문제는 .. 내가 파일에 액세스 할 필요가검색 결과

예입니다 : 검색 결과입니다 .flv 또는 .swf - 검색이 완료되면 결과에 액세스 할 수 있어야합니다. 이것은 내가 지금까지 무엇을 가지고

.. 내가 파일을 검색 할 수 있었다이 코드

private void button1_Click(object sender, EventArgs e) 
     { 

      txtOutput.Text = ""; 

      foreach (string file in Directory.GetFiles("C:\\Users\\John\\Desktop\\Sample")) 
       if (Path.GetFileName(file).Contains(txtSearch.Text)) 
        txtOutput.Text += txtOutput.Text + file + ", "; 
     } 

하지만 액세스 할 수없는이 .. 또한 검색의 출력은 파일의 경로와 함께 .. (c : \ users \ John \ desktop \ sample \ Filename.swf와 비슷한 것) 전체 경로가 아닌 파일 이름 만 필요합니다 ..

출력에 여러 줄 입력란을 사용해야합니다. 나는 다른 것을 사용합니까? .. 만일 당신이 더 좋은 제안이 있으면 나를 도와주세요.

+2

. 변수에 저장하고 텍스트 상자에 추가하는 데 사용해야합니다. – Aphelion

+2

파일에 접근 할 수 없다고 말합니다. 그게 무슨 뜻 이니? 모든 코드 쇼는 텍스트 상자에 파일 이름을 추가하는 것입니다.그것은 그것이 당신이하도록 프로그램 한 것과 똑같이하는 것처럼 들립니다. – Pete

+0

내 말은 내가 검색 결과를 사용하거나 실행해야한다는 것입니다. 비디오 파일이라면 결과를 클릭했을 때 비디오를 재생해야한다는 말입니다. 그런 식으로 .. 내 출력은 지금까지의 경로입니다. c : \ users \ John \ desktop \ sample \ Filename.swf 내 출력으로 플래시 비디오에 액세스 할 수 없습니다. –

답변

1

특정 확장명을 가진 파일을 찾으려면 EnumerateFiles 또는 Directory.GetFiles 검색 방법을 사용하십시오. 또한 파일 경로에서 파일 이름을 얻을 수 Path.GetFileName를 사용

var path = "C:\\Users\\John\\Desktop\\Sample"; 
txtOutput.Text = String.Join(", ", Directory.GetFiles(path, "*" + txtSearch.Text) 
              .Select(f => Path.GetFileName(f)); 

귀하의 txtSearch.Text 파일을 검색의 확장 (즉, .swf 또는 .flv)를 가지고 가정합니다. 따라서 검색 패턴은 *.swf 또는 *.flv이됩니다.

따라서 검색 텍스트 상자에 텍스트 .swf이 있고 샘플 디렉토리에 두 개의 sfw 파일이 있으면 file1.swf, file2.swf으로 출력됩니다.


당신은 어떤 파일 이름 문자열을 검색하려면 :

listBox1.DataSource = Directory.GetFiles(path, "*" + txtSearch.Text + "*") 
           .Select(f => Path.GetFileName(f)) 
           .ToList(); 

UPDATE : 파일 열기

표시 파일을 여러 텍스트 상자의 대신

var path = "C:\\Users\\John\\Desktop\\Sample"; 
txtOutput.Text = 
    String.Join(", ", Directory.GetFiles(path, "*" + txtSearch.Text + "*") 
           .Select(f => Path.GetFileName(f))); 

그리고, 사용 목록 상자

private void listBox1_DoubleClick(object sender, EventArgs e) 
{ 
    var fileName = listBox1.SelectedItem as string; 
    if (fileName != null) 
    { 
     var path = Path.Combine("C:\\Users\\John\\Desktop\\Sample", fileName); 
     Process.Start(path); 
    } 
} 
+0

내 코드에이 코드를 추가 할 수 있습니까? 나는 코드를 넣을 곳을 이해하지 못하는 것 같습니다 .. 묻기 미안합니다 .. –

+0

내 텍스트 상자에 출력이 없습니다 .. 무엇이 문제가 될 수 있습니까? –

+0

@ JurelJacinto 어떤 옵션을 먼저 시도해 보셨습니까? 그리고 당신은 당신의 수색 texbox에서 무엇을 가지고 있습니까? –

0
private void button1_Click(object sender, EventArgs e) 
    { 

     txtOutput.Text = ""; 
     List<string> fileNames = new List<string>(); 
     foreach (string file in Directory.GetFiles("C:\\Users\\John\\Desktop\\Sample")){ 
      if (Path.GetFileName(file).Contains(txtSearch.Text)){ 
       txtOutput.Text += txtOutput.Text + file + ", "; 
       fileNames.Add(file); 
      } 
     } 

    } 

여기에서 파일 이름 목록의 파일을 사용할 수 있습니다.

+0

어떻게? 동일한 출력 코드를 추가하면 .. –

1

당신은 e가 가까워지면 여기에 몇 가지 변경 사항이 있습니다.

여러 줄로 된 텍스트 상자 대신 ListBox를 만듭니다. 이렇게하면 항목에 대해서도 더블 클릭을 처리 할 수 ​​있습니다. 예를 들어 ListBox1은 ListBox1입니다.

이 귀하를 Button1_Click 방법을 변경

:

private void button1_Click(object sender, EventArgs e) 
    { 
     // You can add your seach text right to the GetFiles command, this will only return files that match. 
     // You can set the list of of items int he ListBod to the result of GetFiles instead of having to loop through as well. 
     listBox1.Items.AddRange(Directory.GetFiles(@"C:\Users\John\Desktop\Sample", "*" + txtSearch.Text + "*")); 
    } 

그런 다음 ListBox1_DoubleClick을 처리 : 당신은 이미 Path.GetFileName (파일) 속성을 사용하는

private void listBox1_DoubleClick(object sender, EventArgs e) 
    { 
     // This will run whatever file name the user double-clicked 
     System.Diagnostics.Process.Start(listBox1.SelectedItem.ToString()); 
    } 
+0

나는 당신이 말한대로했으나 ListBox1에서는 아무 것도 보여주지 않습니까? 뭔가를 사용해야합니까? "using System.Windows.Forms;"를 의미합니다. .. –

+0

양식에 ListBox를 추가해야합니다. 디자이너 모드에서 도구 상자에서 ListBox를 드래그합니다. –

+0

나는 길을 잃었다.하지만 여전히 출력이 없다. –