2012-12-28 1 views
1

직접 경로가 없어 다른 PC에 설치되기 때문에 상대 경로를 유지하기 위해 변수를 만들었습니다. 프로그램 부하의 초기 페이지가, 그것은 파일이 존재하는지 확인합니다왜 내 javascript 파일은 한 위치에서 파일을 만들지 만 다른 위치에서 읽으려고합니까?

var mainUrlCONST = "../../annotations/annotate.xml"; 

. 그렇지 않으면 생성합니다.

여기에 문제가있다. 정확히 내가 원하는 곳에서부터 읽는다. 그러나 파일을 보면, 내가 지정한 위치 대신에 PC의 다른 곳에 그것을 생성한다. 파일에 대한

이 확인 :이 파일을 작성

function initializeAnnotationFile() 
{ 
    try 
    { 
     var connection = new ActiveXObject("Microsoft.XMLHTTP"); 
     connection.open("GET", mainUrlCONST, false); 
     connection.send(); 

     if (connection.readyState == 4) 
     { 
     response = connection.responseText; 
     } 

     xml = response; 
     mainExists = true; 
    } 
     catch(e) 
    { 
     mainExists = false; 
    } 
} 

가 존재하지 않는 경우

function createAnnotationFile() 
{ 
    var fso = new ActiveXObject("Scripting.FileSystemObject"); 
    var s = fso.CreateTextFile(mainUrlCONST, true); 

    s.WriteLine("<list>"); 
    s.WriteLine(" <section title='Annotations'>"); 
    s.WriteLine(" </section>"); 
    s.WriteLine("</list>"); 
} 

여기에 어떤 도움이 될 것입니다 경우, 작동하는 직접 경로입니다.

var mainUrlCONST = "G:/folder/annotations/annotate.xml"; 
+2

귀하의 질문에 대한 필수 정보가 누락되었습니다 : 1. 어떤 환경에서 실행되고 있습니까? 2. 파일을 찾는 코드가 어떻게 생겼습니까? 3. 파일에 쓰는 코드는 어떻게 생겼습니까? 4. 파일은 어디에서 끝나나요? 5. 어디에서 * 결국 끝날 것이라고 기대 했습니까? 6. 왜 그걸 기대 했습니까? –

+0

코드가 표시되지 않습니다. 당신이하는 일을 우리에게 보여주지 않으면 어떻게 당신을 도울 것으로 기대합니까? –

+0

파일을 작성하는 코드는 어떻게 생겼습니까? 파일을 읽는 것은 어떨까요? 그것은 단지 경로에 관한 것이 아니라 경로를 사용하는 방법입니다. 또한, 머신들 사이에서 이식성있게 설계된 스크립트의 경로명에'..'를 사용하는 것은 나쁜 생각처럼 보입니다. –

답변

1

FSO 및 상대 경로에 문제가있었습니다. 모든 문서에 따르면 경로는 절대적이거나 상대적인 경로 일 수 있지만 개인적으로는 상대 경로가 작동하지 못했습니다.

로컬 응용 프로그램에서 설치 폴더 기반 주소 지정 시스템을 사용하고 있습니다.

function getInstallBase() { 
    var defInstal = 'Application_installation_folder_name', 
     selfPath = window.location.pathname.replace(/\\/g,'/'); 
    if (selfPath.charAt(0) === '/') { // * 
     selfPath = selfPath.substring(1, selfPath.length); 
    } 
    selfPath = selfPath.split(defInstal); 
    return selfPath[0] + defInstal + '/'; 
} 
var defRoot = getInstallBase(); 

*은 IE가/G 반환 = : 단순화 된 버전이 같은 것입니다/HTA가 G를 반환 할 때 ... :/...

defRoot

지금 설치 폴더의 절대 경로를 포함, 그것이 어디에 저장 되든간에.

이 코드를 응용 프로그램의 설치 폴더에있는 JS 파일에 넣으십시오. 경로가 필요한 경우 defRoot (설치 폴더에서 계산)을 기준으로 제공하십시오.

var s = fso.CreateTextFile(defRoot + 'annotations/annotate.xml', true); 

내가 휴대용 애플리케이션을 위해이 기술을 사용했습니다, 그리고 그것은 마법처럼 작동합니다 : 귀하의 경우에는이 같이 사용할 수 있습니다 (설치 폴더를 folder입니다 가정). 코드를 전혀 건드리지 않고도 메모리 스틱, CD, DVD 등에 원하는대로 실행 가능한 복사본을 만들 수 있습니다.

+0

나는 이것이 성공할 것이라는 데는 의심의 여지가 없기 때문에이 글을 답으로 표시했다. 그러나 앱이 현재 웹 사이트로 실행 중이며 패키지되고 설치되지 않았기 때문에 설치 경로가 없다. – xRuhRohx

+0

@xRuhRohx 문제없이 인트라넷 서버에서 실행되는 HTA에서도이 기능을 사용했습니다. 어쩌면 테스트 목적으로 문자 그대로'defRoot'를 설정할 필요가 있습니다. 서버에서 HTAs가 클라이언트 컴퓨터에서 실행될 때입니다. – Teemu

+0

파일을 검사 할 때 올바른 위치를 검사하지만 기록 할 때 바탕 화면에 기록하려고합니다. IE에서 실행 중이며 아직 앱으로 패키징되어 설치되지 않았기 때문에 가정합니다. – xRuhRohx

관련 문제