2014-10-05 3 views

답변

2

을 답 :

var Q = require('Q'); 

var getUserDoc = function(callback) { 

    var Winreg = require('winreg'); 
    var deferred = Q.defer(); 

    var regKey = new Winreg({ 
     hive: Winreg.HKCU, 
     key: '\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders' 
    }); 

    var myDocFolder = regKey.values(function(err, items) { 
     for (var i in items) { 
      if (items[i].name === 'Personal') { 
       deferred.resolve(items[i].value); 
      } 
     } 
    }); 
    deferred.promise.nodeify(callback); 
    return deferred.promise; 


} 

getUserDoc().then(function(result) { 
    console.log(result); 
}); 
+1

정보를 찾는 좋은 방법은 아닙니다. 레지스트리를 해킹하는 것보다 공식 API를 호출하는 것이 더 낫다. –

+0

나는 그것도 좋아하지 않지만 또 다른 가능성이있다? –

+0

node.js에서 수행 할 수있는 작업을 모릅니다. Win32는 이러한 위치를 얻기위한 API를 제공합니다. –

-1

당신은을 사용해야을

그래서 나는 다음과 같은 C# 코드로 NodeJs에 뭔가를 좀하고 싶습니다 환경 변수 대신

function getUserDoc() { 
    return process.env.USERPROFILE+'\\Documents'; 
} 

여기서는 Win7 이상을 실행한다고 가정합니다. Win XP의 경우 \\My Documents이됩니다. 당신은 당신의 기능에서 하나 또는 다른 것을 쉽게 확인할 수 있습니다.

또한, 당신은 어떻게이 경우에는 바로 가기 홈 디렉토리()

을 제공하는 패키지 path-extra 당신이 한 것 사용할 수 있습니다

var path = require('path-extra'); 

function getUserDoc() { 
    return path.homedir()+'\\Documents'; 
} 

이러한 솔루션은 모두 당신이주지 할 수 있도록 귀하의 응용 프로그램 레지스트리를 확인하기위한 자격 증명. 그리고 당신이 찾은 약속 + 레지스트리 해킹보다 빨리 실행하십시오.

업데이트 : path-extra 더 이상 homedir을 지원하지 않습니다. https://github.com/jprichardson/node-path-extra/commit/ce7a0b67ce07ca06ca2eeabf62621e1327b1d113 +1 독창성을 위해 가능한 스 니펫을 저장했습니다. ;-)

+0

사용자가 Windows에서 MyDcouments 폴더의 경로를 변경 한 경우 Patah path.homedir() 및 process.env.USERPROFILE이 올바른 디렉토리를 가리 키지 않습니다 ... 따라서 두 변형 모두 불행히도 작동하지 않습니다 ... –

+0

참고 Windows XP는 문서 폴더를 번역합니다. 프랑스에서는'\\ Mes Documents'가 될 것입니다. Vista 및 최신 작업 (별칭은 다른 표시 이름?) – thomasb

+0

각 폴더를 독립적으로 이동할 수 있기 때문에 Downvoted. 사례 : 동료가 다운로드 폴더를'D : \ Downloads'로 옮겼습니다. 작동하지 않습니다. – thomasb