2015-01-28 1 views
0

두 개의 다른 버튼을 사용하고 싶습니다. 하나의 버튼은 사용자가 특정 파일을 선택하기 위해 openfiledialog를 열 때 생성 버튼을 클릭하여 선택된 파일을 사용하여 모든 내용을 배열에 추가 할 수 있습니다.openfiledialog에서 포함 파일의 배열로 파일 경로를 읽는 방법

private void btnChoose_Click(object sender, EventArgs e) 
{ 
    OpenFileDialog openFileDialog = new OpenFileDialog(); 
    openFileDialog1.Filter = "Text Files (.txt)|*.txt"; 
    openFileDialog1.FilterIndex = 1; 
    openFileDialog1.Multiselect = true; 


    if (openFileDialog.ShowDialog() == DialogResult.OK) 
    { 
     string sFileName = openFileDialog.FileName; 
     string[] arrAllFiles = openFileDialog.FileNames; 
     txtScriptfile.Text = arrAllFiles[0]; 
    } 

     } 

그리고 여기에 내가 모든 읽기에 파일 경로를 사용하려면 :

어떻게 그 파일 경로가 난 파일 열기 대화 상자에이 코드를 가지고있는 System.IO.ReadAllLines(filepath)

에서 일을받을 수 있나요 라인 :

private void btnGenerate_Click(object sender, EventArgs e) 
{ 

    string sThirdID = ""; 
    string sSiteName = ""; 
    string sFile = ""; 
    FilePathScript = "@\"" + txtScriptfile.Text + "\""; 
    FilePathSite = "@\"" + txtSiteFile.Text +"\""; 
    FilePathDestinationFolder = "@\"" + txtdestinationFolder.Text + "\""; 
    txtScriptfile.Text = FilePathScript; 
    txtSiteFile.Text = FilePathSite; 
    txtdestinationFolder.Text = FilePathDestinationFolder; 

    string[] Scriptlines = System.IO.File.ReadAllLines(FilePathScript); 
    string[] Sitelines = System.IO.File.ReadAllLines(FilePathSite); 
+3

경로에 @ ""을 추가하는 이유는 무엇입니까? 그 (것)들에서 그 (것)들을 축 어적으로 만드는 것을 예정하는 경우에, 당신은 그것을 필요로하지 않는다. 컴파일러가 특별한 문자를 무시하고 당신이 그것들을 벗어나지 않아도되도록 문자열에 @ ""를 추가해야만합니다. – BoeseB

+1

_ "해당 파일 경로를 어떻게 작동 시키나요?"_ 현재 ** 작동하지 않는 ** 어떤 방식으로 작동합니까? –

+1

하나의 파일 만 선택하려면'MultiSelect = True'가 필요하지 않습니다. 그냥'FileName' 속성을 사용하십시오. 그런 다음 선택한 파일을 큰 따옴표로 묶으려는 시도가 잘못되었습니다 ("\" ")를 사용하고 쓸모가 없습니다.) ReadAllLines 메소드는 파일 이름의 공백을 처리하는 방법을 알고 있습니다 – Steve

답변

1

당신은 배수가 아닌 하나 개의 파일을 원하는, 그래서 Multiselect=true 또는 설정 Multiselect=false 놓습니다. 한 번 선택하면 openFileDialog.FileName이 텍스트 컨트롤에 저장되고 나머지는 Choose_Click으로 정리합니다.

Generate_Click은 어떤면에서 엉망 약간이지만, 당신이 원하는 것을 실제로 가까이 : 당신은 sThirdID, sSiteNamesFile으로 아무것도하지 않고, 그래서 그들을 제거. 파일 이름을 다루는 것은 다소 혼란 스럽습니다. 문자열 리터럴을 다룰 때는 앞뒤에 큰 따옴표를 붙여야합니다. verbatim string을 나타내는 @ 문자와 함께 전체 문자열 리터럴 앞에 특수 표기법을 사용하지 않는 한 백 슬래시를 처리하거나 "이스케이프"하기위한 특별한 조치를 취해야합니다. 그러나 텍스트 상자의 파일 이름은 사용자가 시스템 열기 대화 상자에서 파일 이름을 선택하여 설정해야하므로 추가 처리가 필요하지 않습니다.

은 그래서 당신이 대부분의 세부 사항을 제공 한있는 하나의 파일 이름을 가지고, 그것을 txtScriptFile.Text을 살펴 보자 : 당신이 바로 File.ReadAllLines()에이 파일 이름을 전달하면, 그것은 당신이 쓴 것처럼 문자열의 배열을 반환해야합니다 .. . 제공된 사용자가 프로그램을 실행할 때 유효한 텍스트 파일을 선택했습니다 (예 :이 프로젝트의 소스 코드 파일 중 하나).

그럼 다음으로 파일로드가 완료되면 문자열 배열로 무엇을 할 것입니까? 어떻게 든 프로그램에서 결과를 보여주지 않고도 작업에 성공했는지 확인하는 것은 어려울 것입니다.

+0

John에게 답해 주셔서 감사합니다. 나중에 사용되는 사용되지 않는 문자열 변수 일단 내가 배열에 파일을 가지고 함수를 생성합니다.클릭 생성 기능은 주요 기능이 프로그래밍되기 전에 처음부터 추출한 것입니다. 그래서 openfiledialog에서 전역 변수에 파일 경로를 직접 추가하고 System.IO.File.ReadAllLines의 대괄호에 넣는다면 어떻게 작동할까요? 그리고 변수로 넘겨 주면 대괄호 안에 doublequotes 또는 @ 기호가 필요하지 않습니까? 도와 주셔서 감사합니다 :) –

+0

나는 하드 코딩 된 파일 경로를 지정하면 프로그램이 완벽하게 작동합니다. 그게 왜 내가 openfiledialog를 작동 시키려고하는지. 메신저 여전히 C#을 매우 새로운 :) –

+0

@AndreaVisnenzaAndy 로컬 변수가 아닌 전역 변수,하지만 예. 디버거를 실행하고 배열을 사용하는 나머지 코드로 진행하기 전에이 줄을 건너 뛰기 직후에'Scriptlines'의 내용을 확인하십시오. StackOverflow에 질문을 게시하는 몇 가지 메타가 있습니다 : [** Minimal Complete Verifiable Example **] (https://stackoverflow.com/help/mcve); [** Accept Answers **] (https://stackoverflow.com/help/accepted-answer). –

관련 문제