繁体   English   中英

检查一个文件路径是否存在于另一个文件路径中?

[英]Check if one file path exists inside another?

假设我有以下 2 个路径名字符串(windows 环境):

roaming = `C:\Users\User\AppData\Roaming\.minecraft\`

bin = `%AppData%\.minecraft\bin`

如何检查roaming是否存在bin 有没有办法获得一个布尔值,表示bin嵌套在roaming

注意: fs.exists()、existsSync() 和 access() 都根据当前目录检查目录 我想在不更改当前目录的情况下检查指定目录

注意 2:替换%AppData%是一个优雅的解决方案,但我需要一个使用环境来进行评估的解决方案,因此它也可以处理诸如 windows 文件夹重定向之类的事情。

示例:假设用户通过 windows 10 上的electronjs 中的 html 输入给我这个存储库路径(不是在寻找 windows/electron 特定的答案,只是一个例子)(作为字符串存储在repo_var ):

%AppData%\\SOME_APPDATA_FOLDER\\SOME_REPOSITORY\\

假设用户然后给了我这个文件夹(作为字符串存储在file_var ):

D:\\SOME_NETWORK_DRIVE\\USER_PROFILES\\THIS_USER\\AppData\\Roaming\\SOME_APPDATA_FOLDER\\SOME_REPOSITORY\\SOME_DIRECTORY\\SOME_FILE.SOME_EXTENSION

在此特定客户端%AppData%评估为D:\\SOME_NETWORK_DRIVE\\USER_PROFILES\\THIS_USER\\AppData\\Roaming in PowerShell

我想运行这个:

const { exec } = require( "child_process" );
exec( "git -C " + repo_var + " log --follow -p -- " + file_var )

在 powershell 中运行该 shell 命令(来自 nodejs)之前,我想确保 file_var 是存储库(repo_var)中的一个文件,以避免在主机环境中运行错误命令(本示例中的 POWERSHELL)

首先,您应该使用String.raw以便反斜杠不会被擦除:

const roaming = String.raw`C:\Users\User\AppData\Roaming`;
const bin = String.raw`%AppData%\.minecraft\bin`;

接下来,您应该使用fs.existsSync进行测试:

const fs = require("fs");
if (fs.existsSync(bin.replace(/%AppData%/, roaming)) {
    // directory exists
} else {
    // directory doesn't exist
}

如果您可以确定特定的分隔符,例如本例中的\\SOME_APPDATA_FOLDER\\ ,则可以确定所需的文件路径并针对fs.access对其进行fs.access (在此示例中已承诺)。

let delimiter = `\\SOME_APPDATA_FOLDER\\`,
    repo_var = `%AppData%\\SOME_APPDATA_FOLDER\\SOME_REPOSITORY\\`,
    file_var = `D:\\SOME_NETWORK_DRIVE\\USER_PROFILES\\THIS_USER\\AppData\\Roaming\\SOME_APPDATA_FOLDER\\SOME_REPOSITORY\\SOME_DIRECTORY\\SOME_FILE.SOME_EXTENSION`,
    test_var = repo_var.substring(0, repo_var.indexOf(delimiter))
               + file_var.substring(file_var.indexOf(delimiter))

console.log('this file will be checked', test_var)

fs.promises.access(test_var, fs.constants.F_OK)
  .then(() => {
    console.log('file exists', test_var)
  }
  .catch(() => {
    console.log('file doesn\'t exist', test_var)
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM