【问题标题】:fs: how do I locate a parent folder?fs:如何找到父文件夹?
【发布时间】:2011-10-28 07:45:37
【问题描述】:

我如何写这个来备份父级 2 级来查找文件?

fs.readFile(__dirname + 'foo.bar');

【问题讨论】:

    标签: javascript node.js filesystems


    【解决方案1】:

    试试这个:

    fs.readFile(__dirname + '/../../foo.bar');
    

    注意相对路径开头的正斜杠。

    【讨论】:

    • 我一直在尝试,但没有运气,但我刚刚做了fs.readFile(__dirname + '/../../foo.bar');,它成功了。
    • 我假设__dirname 类似于'/foo/bar' 而不是'/foo/bar/'
    • 路径中的第一个“/”:“/../../foo.bar”至关重要。我有 '../../foo.bar' 这导致了我的问题。
    • 为什么?只是一般为什么?有人可以解释一下吗?
    • @eyurdakul 如果我正确理解:__dirname 可能看起来像 /path/to/your/dir,如果你说 __dirname + ".." 它是 /path/to/your/dir..,这是一个不存在的目录,而不是 /path/to/your。斜线很重要。
    【解决方案2】:

    看来您需要path 模块。 (特别是path.normalize

    var path = require("path"),
        fs = require("fs");
    
    fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
    

    【讨论】:

      【解决方案3】:

      使用 path.join http://nodejs.org/docs/v0.4.10/api/path.html#path.join

      var path = require("path"),
          fs = require("fs");
      
      fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
      

      path.join() 将为您处理前导/尾随斜杠,并且只做正确的事情,您不必尝试记住尾随斜杠何时存在以及何时不存在。

      【讨论】:

      • 这个path.join的答案是正确的方法,不应该遵循接受的答案,它甚至会在airbnb-base preset上触发eslint,特别是规则no-path-concat
      • 第 100 次投票。我的__dirnamehost/src/folder,我需要host/folder,这对我有用,而不是OP 答案。
      • 你可以更进一步,做path.join(__dirname, '..', '..', 'foo.bar')
      • 谢谢 Alex,经过 6 小时的搜索,您救了我,
      【解决方案4】:

      如果您不确定父母的位置,这将为您提供路径;

      var path = require('path'),
          __parentDir = path.dirname(module.parent.filename);
      
      fs.readFile(__parentDir + '/foo.bar');
      

      【讨论】:

        【解决方案5】:

        如果另一个模块调用了你的模块,而你仍然想知道正在运行的主文件的位置,你可以使用 @Jason 代码的修改:

        var path = require('path'),
            __parentDir = path.dirname(process.mainModule.filename);
        
        fs.readFile(__parentDir + '/foo.bar');
        

        这样您将获得实际运行的脚本的位置。

        【讨论】:

          【解决方案6】:

          我知道这有点挑剔,但到目前为止所有的答案都不完全正确。

          path.join() 的目的是消除调用者知道要使用哪个目录分隔符的需要(使代码平台不可知)。

          从技术上讲,正确的答案是这样的:

          var path = require("path");
          
          fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
          

          我会将此作为评论添加到 Alex Wayne 的回答中,但还没有足够的代表!

          编辑:根据 user1767586 的观察

          【讨论】:

          • 'foo.bar" 应该是 'foo.bar'。我试图进行编辑,但编辑至少需要 6 个字符(如果你问我,这是愚蠢的规则,阻止我们编辑小错字,例如这个)。
          • 我怀疑这是最好的答案。其他一些答案可能适用于给定操作系统上的给定个人,但是在这些其他答案中存在特定类型的文件层次结构分隔符(即斜线)让我想知道它们的普遍性是。例如我正在尝试以与平台无关的方式编写一个 Electron 应用程序,虽然我没有详尽地证明这一点,但我怀疑这是最安全的方式。谢谢。
          • 这实际上是不必要的,因为 path.join() internally uses path.normalize() (将所有路径分隔符转换为当前/预期的 OS 格式)在返回之前生成的连接路径上。不过,它不会受到伤害。
          【解决方案7】:

          你可以使用

          path.join(__dirname, '../..');
          

          【讨论】:

            【解决方案8】:

            最简单的方法是使用path.resolve:

            path.resolve(__dirname, '..', '..');
            

            【讨论】:

            【解决方案9】:

            这也可以:

            fs.readFile(`${__dirname}/../../foo.bar`);
            

            【讨论】:

              【解决方案10】:

              我正在运行电子应用程序,我可以通过 path.resolve() 获取父文件夹

              父级 1 级:path.resolve(__dirname, '..') + '/'

              父母2级:path.resolve(__dirname, '..', '..') + '/'

              【讨论】:

                【解决方案11】:

                这很好用

                path.join(__dirname + '/../client/index.html')
                
                const path = require('path')
                const fs = require('fs')
                    fs.readFile(path.join(__dirname + '/../client/index.html'))
                

                【讨论】:

                  【解决方案12】:

                  您可以通过不同的方式找到父文件夹下的文件,

                  const path = require('path');
                  const fs = require('fs');
                  
                  // reads foo.bar file which is located in immediate parent folder.
                  fs.readFile(path.join(__dirname, '..', 'foo.bar'); 
                  
                  // Method 1: reads foo.bar file which is located in 2 level back of the current folder.
                  path.join(__dirname, '..','..');
                  
                  
                  // Method 2: reads foo.bar file which is located in 2 level back of the current folder.
                  fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
                  
                  // Method 3: reads foo.bar file which is located in 2 level back of the current folder.
                  fs.readFile(__dirname + '/../../foo.bar');
                  
                  // Method 4: reads foo.bar file which is located in 2 level back of the current folder.
                  fs.readFile(path.resolve(__dirname, '..', '..','foo.bar'));
                  

                  【讨论】:

                    猜你喜欢
                    • 2020-02-04
                    • 1970-01-01
                    • 2019-09-26
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-10-11
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-05-18
                    相关资源
                    最近更新 更多