2016-08-09 3 views
0

API의 데이터를 일부 파일에 쓰는 스크립트가 있습니다. 나는 객체 (가) 각 파일에 대한 파일 설명이 포함되어 있습니다 fs.readFileSync는 항상 빈 문자열을 반환합니다.

var csvFds = { 
    'file1' : null, 
    'file2' : null, 
    'file3' : null, 
    'file4' : null 
}; 

for (var file in csvFds) { 

    var dirPath = __dirname + '/files/' + file; 

    try { 
     fs.statSync(dirPath); 
    } 
    catch (e) { 
     mkdirp.sync(dirPath, {mode: 0755}); 
    } 

    csvFds[file] = fs.openSync(dirPath + '/' + moment().format("YYYY-MM-DDTHH:mm:ss[Z]") + '.csv', 'a+'); 
} 

는 그럼 난 일괄 파일에 CSV의 라인을 작성하는 fs.write를 사용하는 몇 가지 코드가 있습니다. 이 부분은 잘 작동합니다. 나는 CSV 파일을 잘 형성했다. 이제 전체 파일의 내용을 문자열로 읽어야합니다. 이것이 내가하는 방법입니다 :

fs.readFileSync(csvFds['file1']).toString(); 

하지만 저는 항상 빈 문자열을 얻고 있습니다. fs.readFileSync가 실제로 console.log를 사용하고 toString() 메소드를 삭제하여 Buffer를 반환하고 있음을 확인했습니다.

정말 도움이되므로 크게 도움이 될 것입니다. 미리 감사드립니다. 이 readFileSync(csvFds['file1'], 'utf-8') 같은 readFileSync를 호출하는

$ node -v 
v6.2.3-pre 

$ uname -a 
Darwin i-2.local 14.5.0 Darwin Kernel Version 14.5.0: Thu Jun 16 19:58:21 PDT 2016; root:xnu-2782.50.4~1/RELEASE_X86_64 x86_64 
+0

'readFileSync' 메소드에 인코딩을 제공하면'Buffer' 대신에 문자열을 얻을 것입니다 – mic4ael

답변

0

시도 : 여기 내 노드 버전 및 OS에 대한 몇 가지 추가 정보입니다. 그것은 문자열을 반환해야합니다. 또는 인수를 생략하고 toString 메소드를 호출 할 때 인코딩을 제공 할 수 있습니다. readFileSync(csvFds['file1']).toString('utf-8')

+0

Hey Michael. 나는 이전에이 두 가지를 실제로 시도해 보았고 다시 시도했다. 그러나 나는 여전히 빈 문자열을 얻는다. 이것을 디버깅하려면 파일 디스크립터 나 버퍼에 대한 정보를 얻는 방법이 있어야합니다. 나는 노드 버전을 바꾸려고한다. –

+0

csvFds 사전에 정확한 데이터가 포함되어 있는지 확인 하시겠습니까? 루프 종료 후 csvFds에 포함 된 내용을 표시 할 수 있습니까? – mic4ael

+0

그것은 추측하지만 코드'now.getTime이 조각()'나에게 조금 의심스러운 보인다는 – mic4ael

관련 문제