首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查文件是否存在(区分大小写)

检查文件是否存在(区分大小写)
EN

Stack Overflow用户
提问于 2014-12-08 21:27:01
回答 4查看 5.1K关注 0票数 2

是否有一种方法可以检查NodeJS中是否存在区分大小写的文件,即使底层文件系统不区分大小写。

根据基础文件系统的不同,fs.exists()可能区分大小写,也可能不区分大小写。

代码语言:javascript
复制
 fs = require('fs');
 fs.existsSync('readme.txt') // true
 fs.existsSync('README.TXT') // false (or true, depending on the file system)

这会在将部署到区分大小写的服务器上的不区分大小写的开发环境上开发应用程序时产生问题。最近,我遇到了一个问题,在这个问题上,构建被一个错误打破了。在当地起作用了。

如果我能让Node告诉我,“是的,README.TXT存在,并且它被存储为readme.txt”,这就足够解决问题了。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-01-04 09:23:33

因为我不能评论< 50代表,所以我会做一个新的职位。

@patrik的解决方案运行良好,除了在windows上,因为根检查

我把它改为如下:

代码语言:javascript
复制
function fileExistsWithCaseSync (filepath) {
  var dir = path.dirname(filepath)
  if (dir === path.dirname(dir)) {
    return true
  }
  var filenames = fs.readdirSync(dir)
  if (filenames.indexOf(path.basename(filepath)) === -1) {
    return false
  }
  return fileExistsWithCaseSync(dir)
}
票数 2
EN

Stack Overflow用户

发布于 2014-12-09 15:36:11

按照安德烈的建议,我实现了一个使用readdir的函数。

代码语言:javascript
复制
var fs = require('fs');
var path = require('path');

function fileExistsWithCaseSync(filepath) {
    var dir = path.dirname(filepath);
    if (dir === '/' || dir === '.') return true;
    var filenames = fs.readdirSync(dir);
    if (filenames.indexOf(path.basename(filepath)) === -1) {
        return false;
    }
    return fileExistsWithCaseSync(dir);
}

console.log(fileExistsWithCaseSync(__dirname + '/README.txt')) // false
console.log(fileExistsWithCaseSync(__dirname + '/readme.txt')) // true

我不会在生产中使用这个函数,因为每个调用都会对文件系统进行几次同步访问。但是它足够满足我的需要:当文件实际上名为Foo.js (在生产中不能工作)时,阻止本地开发服务器为foo.js提供服务。

票数 7
EN

Stack Overflow用户

发布于 2018-10-20 17:38:47

只是为了帮助有这条路问题的人。

帕特里克的函数非常适合这种情况,但不能解决路径问题,我发现真路径模块实际上解决了我在linux (ubuntu)上的区分大小写路径的问题。

查看更多信息,这里

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27367261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档