2010-12-05 3 views
3

C# 콘솔 응용 프로그램에서 파일의 데이터를 읽어야합니다. new StreamReader(@"..\\..\myData.csv");C# console app : .. .. filename이없는 참조 파일

문제가 : 작동 무엇
내 exe 파일이 빈/디버그 디렉토리에 있기 때문에 내 프로젝트를 배포 할 때 가 ..\\..\ 작업 경로가 더 이상 작동하지 않습니다

질문 : 어떻게 exe 파일의 위치에 관계없이 myData.csv를 참조합니까?

Process.GetCurrentProcess().MainModule.FileName
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location
Path.GetFullPath("bp.csv")
AppDomain.CurrentDomain.BaseDirectory
Directory.GetCurrentDirectory()

:

내가 내 콘솔 응용 프로그램의 '루트'를 반환하는 방법을 찾기 위해 기대했던

지금까지 나는 다음을 시도 이 모든 표현은 루트가 아닌 exe 파일의 디렉토리로 안내합니다.

방금 ​​격리 된 저장 용량에 대해 읽었지만 더 간단한 것이 좋을 것 같습니다. 어떤 제안/권장 사항?

+1

콘솔 응용 프로그램의 "루트"는 귀하에게 어떤 의미입니까? – Gabe

+0

프로젝트를 배포 할 때 myData.csv는 .exe를 기준으로 어디에 있습니까? 항상 같은 (절대) 경로에있을 것인가? – Cameron

답변

2

myData.csv는 어디에 저장됩니까? 이 파일의 절대 위치가 있어야합니다.

가 당신의 exe는 당신이

new StreamReader("myData.csv"); 
  • 당신이 파일의 위치를 ​​정의 할 수 있습니다

    을 할 필요가 유일한 있도록 배치된다 당신은 같은 디렉토리에이 파일을 배치 할 수 있습니다

    1. 옵션의 커플 App.Conig 파일에서 해당 위치를 읽습니다.

    2. 경로 변수를 설정하여 PATH 변수를 읽을 수 있습니다.

  • +1

    '새 StreamReader ("myData.csv")'는 현재 작업 디렉토리에서 실제로 읽히지 만 반드시 exe 위치에서 읽는 것은 아닙니다. –

    5

    가장 간단한 방법은에 (이 출력됩니다 그것을 함께 .exe 인 솔루션에 CSV 파일을 추가하고 VS에서 마우스 오른쪽 버튼을 클릭하고 "새로운 경우 복사"로 빌드 작업을 설정하는 아마 디버그 또는 릴리스 폴더)를 만듭니다.

    string folder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
    

    을 그리고 당신은 CSV 파일 이름과 경로를 결합 할 수 있습니다 : 코드에서

    ,이 같은 실행 어셈블리의 현재 위치를 얻을 수

    string filePath = Path.Combine(folder, "myData.csv"); 
    
    +2

    이것은 정확한 접근 방법이지만,'Assembly.GetExecutingAssembly()'는 DLL이 아닌 EXE가 될 수있는 현재 메소드를 보유하고있는 어셈블리를 실제로 반환 할 것이고 별도의 폴더에있을 수도 있습니다. 'GetEntryAssembly()'는 EXE 어셈블리를 반환합니다. –

    0

    당신이해야 코드를

    new StreamReader("myData.csv"); 
    

    으로 변경하십시오. 그러면 데이터가 항상 동일한 폴더에서 읽혀집니다. .exe는에서 실행됩니다.

    그런 다음 빌드 빌드 단계를 만들어 파일을 배포 폴더 (또는 하위 폴더)에 복사하면 디버그 환경에서도 파일이 올바른 위치에있게됩니다. 데이터 파일의 "출력 폴더에 복사"속성은 파일이 프로젝트의 출력 경로에 있어야하는 경우에도이 작업을 수행합니다.

    더 많은 제어가 필요한 경우, 빌드 빌드 단계에서 $ (ProjectPath)와 같은 매크로를 사용하여 프로젝트 파일의 위치를 ​​참조하고 $ (TargetDir)을 사용하여 출력 디렉토리의 위치를 ​​참조 할 수 있습니다.

    관련 문제