我在fs.stat上遇到一个奇怪的问题,检查一个文件是否有效, 当我传递一个带变量的绝对路径(在本例中为filePath)
它将项目的路径附加到我发送的路径上!
FileCompresser.CompressFile = (filePath,callback) =>{
console.log(filePath);
fs.stat(filePath,(err,stat)=>{
if(err){
callback(err,null);
return;
}
var readStream = fs.createReadStream(filePath).pipe(zlib.createGzip());
callback(null,readStream);
});
}
AssertionError: expected Error { code: 'ENOENT', errno: -4058, path: 'C:\\carpetica\\NodeCompress\\C:\\carpetica\\delete.reg', syscall: 'stat', message: 'ENOENT: no such file or directory, stat \'C:\\carpetica\\NodeCompress\\C:\\carpetica\\delete.reg\'' } to not exist
如果我执行以下操作,它可以正常工作:
fs.stat("C:/carpetica/delete.reg",(err,stat)=>{
if(err){
callback(err,null);
return;
}
var readStream = fs.createReadStream(filePath).pipe(zlib.createGzip());
callback(null,readStream);
});
但当然这对测试不好......我发送完全相同的值我在那里硬编码...但我得到了那种奇怪的行为......当我直接从REPL运行时,这种行为不会发生模块。
更新: 找到了罪魁祸首(我想!),我测试了两条路径,唯一不同的是 '和围绕字符串的“”
it("should return a compressed file",(done)=>{
var path2 = 'F:/ISOS/linuxmint-17.1-mate-64bit.iso';//this doesnt work!
var path1 = "C:/carpetica/delete.reg";//but this does!
FileCompresser.CompressFile(path2, (err,CompressedfileStream) =>{
should.not.exists(err);
should(CompressedfileStream).be.ok();
done();
});
} );
一旦我在双引号上包装path2,它就按预期工作:)