2016-08-09 4 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+'); 
} 

Тогда у меня есть некоторый код, который использует fs.write писать строки CSV в файл в пакетном режиме. Эта часть работает нормально. У меня хорошо сформированные файлы csv. Теперь мне нужно прочитать содержимое всего файла в виде строки. Вот как я это делаю:

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

Но по какой-то причине я всегда получаю пустую строку. Я подтвердил, что fs.readFileSync фактически возвращает буфер с помощью console.log и отбрасывает метод toString().

Я действительно застрял на этом, поэтому любая помощь будет принята с благодарностью. Заранее спасибо. Вот некоторые дополнительная информация о моей версии узла и ОС:

$ 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

Try называть readFileSync как этот readFileSync(csvFds['file1'], 'utf-8'). Он должен вернуть строку. Или вы можете опустить аргумент, а затем предоставить кодировку при вызове метода toString, например. readFileSync(csvFds['file1']).toString('utf-8')

+0

Эй, Майкл. Я на самом деле пробовал обе эти вещи раньше и просто сделал это снова. Но я все равно получаю пустую строку. Должен быть какой-то способ получить информацию о дескрипторах файлов или буферах для его отладки. Я собираюсь попытаться переключить версию узла. –

+0

Вы уверены, что ваш словарь csvFds содержит правильные данные? можете ли вы показать, что содержит csvFds после окончания цикла? – mic4ael

+0

это дикое предположение, но этот кусок кода 'now.getTime()' кажется немного подозрительным мне – mic4ael

Смежные вопросы