在模块上使用时,Node.js fs.stat无法正常工作

时间:2016-08-01 22:33:10

标签: node.js

我在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,它就按预期工作:)

0 个答案:

没有答案