2013-04-08 2 views
3

좋습니다. 이 101 프로그래밍해야한다고 생각하지만, 파일 경로 이름을 동적으로 충분히 exe 설치되어 명시 적으로 설정할 수 설정하는 방법에 대한 괜찮은 대답을 찾을 수없는 것.txt 저장을위한 올바른 파일 경로 설정 - vb.NET

기본적으로이 응용 프로그램은 실제로 사용자 개인 폴더에 로컬 데이터와 같은 것으로 설치되며 프로그램에서 생성 된 txt 파일을 실행 파일과 동일한 디렉터리에 만들어야합니다 .

현재 경로 :

Dim strFilePath As String = "D:\Development\Bobby\Prototyping\Replication Desktop Client\Replication_Desktop_Client\ClientAccessList.txt" 

나는

Dim strCurrentLocationOfEXE As String = HardDriveLetter & Users & CurrentUserPath & InstalledDirectory 
Dim strFilePath As String = strCurrentLocationOfEXE & "\ClientAccessList.txt"` 

처럼 뭔가를 설정할하지만 난 내 인생이 있기 때문에, 그것은 그 결정에 도착하는 방법을 알아낼 수 없습니다 항상 동일한 폴더에 설치되지 않습니다 (예 : 사용자 이름 및 하드 드라이브 문자가 다를 수 있음).

아이디어가 있으십니까?

Assembly.GetEntryAssembly().Location 

그리고 폴더 경로를 얻기 위해, 당신은 Path.GetDirectoryName를 호출 할 수

+0

당신은 ... OS 특정 environement 변수를 찾아 소개 여기를 봐해야합니다 http://en.wikipedia.org/wiki/Environment_variable – Minus

+0

나, 물어 것이 그것을 변경하자 사용자 로밍 응용 프로그램 데이터 폴더에 txt 파일을 저장하고 올바르게 복제 클라이언트 폴더를 만들 것인가? 'Dim strCurrentAppDataPath As String = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData & "\ Replication Client") String strFilePath As String = strCurrentAppDataPath & "\ ClientAccessList.txt" –

+0

새 폴더를 만들려면 명시 적으로 별도의 단계로 만들어야합니다. Path를 직접 연결하는 것보다는 Path.Combine을 사용하는 것이 더 좋습니다. –

답변

2

당신이 다음이 응용 프로그램을 이동하는 방법에 대한 현재 사용자의 개인 폴더를 참조하려면 어셈블리

Dim fullPath = System.Reflection.Assembly.GetExecutingAssembly().Location 
Dim folderName = Path.GetDirectoryName(fullPath) 
Dim strFilePath = Path.Combine(folderName, "ClientAccessList.txt") 

실행 어디 있는지 경로를 얻을 수는 Environment.SpecialFolder enumaration하는 것입니다.
이 열거 형은이 경우 기본 OS (XP, Win7에, 64, X32 등) 에서 독립적 인 당신은 사용할 수 있습니다

Dim fullPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 
Dim strFilePath = Path.Combine(fullPath, "your_app_reserved_folder", "ClientAccessList.txt") 

이 예제 "your_app_reserved_folder"에서 응용 프로그램 어디에 설치시 생성 된 폴더에 있어야한다 당신은 사용자 데이터 파일을 넣는다. (일반적으로 사용자가 분리하여 보관해야하는 데이터 파일을 저장하는 데 권장되는 방법입니다.)

폴더를 사용하려고하기 전에 폴더의 존재를 확인하려면 파일 이름을 얻기 위해 논리를 캡슐화하십시오 방법

Public Function GetUserAppClientAccessList() As String 

    Dim fullPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
    Dim appFolder = Path.Combine(fullPath, "your_app_reserved_folder") 
    if Not Directory.Exists(appFolder) then 
     Directory.Create(appFolder) 
    End If 
    return = Path.Combine(appFolder, "ClientAccessList.txt") 
End Function 
+0

그래, 변경되었습니다. 내 질문에. 질문을보십시오 –

+0

이것은 어셈블리가 실행중인 경로를 반환합니다. 현재 사용자의 로밍 또는 로컬 폴더와 다를 수 있습니다. 사용자 폴더에서 임의의 경로를 원하면 Environment.SpecialFolder 열거 형 – Steve

+0

Mhmm ... 그래서 사용자가 appdata를 로밍 할 때 txt 파일을 어셈블리 위치에 저장하고 싶지 않습니다. 내가 알아야 할 것은 폴더 데이터 경로를 설정하기 전에 "복제 클라이언트"폴더가 존재하는지 확인하는 논리를 만들어야합니까? 아니면 거기 있지 않으면 자동으로 만들 것입니다 ...? –

0

이렇게하면 실행 파일의 파일 경로를 제공 할 것입니다. 같은 코드가 호출되는 경우 등 어떤 .NET 어셈블리 실행 파일이 존재하지 않는 경우 Assembly.GetEntryAssemblyNothing을 반환 할 수 있지만주의의

Dim exeFilePath As String = Assembly.GetEntryAssembly().Location 
Dim exeFolderPath As String = Path.GetDirectoryName(exeFilePath) 
Dim filePath As String = Path.Combine(exeFolderPath, "ClientAccessList.txt") 

한 비트 : 그래서, 텍스트 파일 경로를 얻기 위해, 당신은 이런 식으로 뭔가를 할 수 COM을 통해 라이브러리로. 이 경우 Environment.GetCommandLineArgs()(0)을 호출하여 명령 줄에서 실행 파일 경로를 사용할 수 있습니다. 그리고 그것이 실패한다면, 어떤 이유로, 당신은 항상 Directory.GetCurrentDirectory()에 의지 할 수 있습니다.

+0

그래, 내 질문에 대한 변경 사항이 있습니다. 질문에 대한 의견을보십시오 –

+0

차라리 appdata 폴더에 보관하는 것이 좋을 것이라고 생각하지만, 올바른 사용자 appdata 로밍 폴더를 가져올만큼 동적이어야합니다. –