문제

Visual Studio 2005에서 작업하고 있으며 Solution Explorer에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 추가-> 새 항목을 사용하여 구문 분석 해야하는 텍스트 파일을 추가했습니다. .txt 파일을 프로젝트 폴더에 배치합니다. 디버그 .EXE 파일은 /bin /debug 폴더에 있습니다.

상대 경로를 사용하여 코드에서 TXT 파일을 올바르게 가리키는 방법은 두 폴더로 돌아가는 동시에 솔루션이 게시 된 후 동일한 폴더에있는 것으로 해결됩니다.

도움이 되었습니까?

해결책

확인하십시오 응용 프로그램 클래스. 애플리케이션이 설치된 후에는 파일 등을 찾는 데 사용할 수있는 여러 멤버가 있습니다.

예를 들어, Application.ExecutablePath는 실행중인 EXE 파일이 어디에 있는지 알려줍니다. 그런 다음 상대 경로를 사용하여 파일을 찾을 수 있습니다. 그러나 이는 파일이 프로젝트 폴더 구조와 동일한 폴더 구조에 배포된다고 가정합니다. 일반적으로 그렇지 않습니다.

프로젝트가 배포 된 후에는 CommonAppDatapath 및 LocalUserAppDatapath와 같은 속성을 고려하여 응용 프로그램 관련 파일을 찾으십시오.

다른 팁

질문을 올바르게 이해하면 : "솔루션 탐색기"에서 파일을 선택하십시오. 속성 아래 -> 출력 디렉토리에 복사 한 경우 "항상 복사"또는 "새로 사용하는 경우 복사"를 선택하십시오. 조치를 빌드하려면 "컨텐츠"를 선택하십시오. 이렇게하면 파일을 빌드시 /빈 /디버그 폴더에 복사합니다. 그때부터 프로젝트 루트에서 그것을 참조 할 수 있어야합니다.

디스크에서 파일을 찾는 대안은 컴파일 된 어셈블리에 직접 파일을 내장 리소스로 포함시키는 것입니다. 이렇게하려면 파일을 마우스 오른쪽 버튼으로 클릭하고 빌드 작업으로 "임베디드 리소스"를 선택하십시오. 그런 다음 파일을 바이트 스트림으로 검색 할 수 있습니다.

Assembly thisAssembly = Assembly.GetExecutingAssembly();
Stream stream = thisAssembly.GetManifestResourceStream("Namespace.Folder.Filename.Ext");
byte[] data = new byte[stream.Length];
stream.Read(data, 0, (int)stream.Length);

임베디드 리소스에 대한 자세한 내용은 확인할 수 있습니다 여기 그리고 여기.

자신의 용도로 응용 프로그램을 구축하는 경우 David Krep의 제안이 가장 좋습니다. 파일을 출력 디렉토리에 복사하십시오. 재사용 또는 배포되는 어셈블리를 구축하는 경우, 내장 된 리소스 옵션이 단일 .dll로 모든 것을 패키지하기 때문에 선호됩니다.

TXT 파일을 활성 구성의 출력 폴더에 복사하는 게시물 빌드 단계를 추가합니다.

xcopy "$(ProjectDir)*.txt" "$(OutDir)"

"와 같이 정의 된 몇 가지 매크로가 있습니다.$(ConfigurationName)", $(ProjectDir)

프로젝트 속성으로 이동 -> 구성 속성 -> 디버깅

"Working Directory"를 $ (TargetDir)로 설정

그런 다음 코드에서 상대 경로를 사용하여 파일을 올바르게 참조 할 수 있습니다 (예 : ".... foo.xml").

Application.ExecutablePath 솔루션은 UnitTests에서 작동하지 않습니다. vstesthost.exe의 경로가 반환됩니다

system.reflection.assembly.getexecutingAssembly (). 위치는 작동하지만 AssemblyMame이 포함 된 경로를 제공합니다.

그래서 이것은 작동합니다 :
System.Reflection.Assembly.GetExecutingAssembly().Location + "\..\" + "fileToRead.txt"

하지만 그냥 :

fileToRead.txt

작동합니다. Working Directory는 기본적으로 실행 어셈블리 디렉토리 인 것 같습니다.

빌드 포스트 빌드 이벤트를 추가하여 .txt 파일을 빌드 출력 폴더에 복사 할 수 있습니다. 그러면 코드가 파일이 실행 파일과 동일한 폴더에 있다고 가정 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top