gpt4 book ai didi

node.js - 为什么 fs.copySync 没有按预期工作?

转载 作者:可可西里 更新时间:2023-11-01 11:44:06 24 4
gpt4 key购买 nike

我尝试将文件从一个目录复制并粘贴到另一个目录,但出现错误 Error: ENOENT: no such file or directory, stat 'D:\transfer\roliki\rolikiNOW\Реклама - ALESA04032016.mp3',尽管路径和文件存在。如果我“手动”将 arg 给 fs.copeSync,它运行良好

for (let i = 0; i < arrPath.length; i++) {
let source = arrPath[i].replace(/\\/g, "\\\\"); // change one slash to double
let destiny = pathToCollect.replace(/\\/g, "\\\\") + "\\\\" + path.parse(arrPath[i]).base; //destination directory
console.log(source);// e.g. D:\\transfer\\roliki\\rolikiNOW\\Реклама - ALESA04032016.mp3

console.log(destiny);// D:\\collect\\Реклама - ALESA04032016.mp3

try {
fs.copySync(source, destiny);
} catch (e) {
console.log(e);// Error: ENOENT: no such file or directory, stat D:\transfer\roliki\rolikiNOW\Реклама - ALESA04032016.mp3
} finally {
console.log("success");
}
}


//this work well, as expected

fs.copySync('D:\\transfer\\roliki\\rolikiNOW\\Реклама - ALESA04032016.mp3', 'D:\\collect\\Реклама - ALESA04032016.mp3');

最佳答案

你做错了。这:\\\\ 没有意义。请记住,您在 stdout 上看到的内容与您在代码中看到的内容不同。

const path = 'D:\\transfer\\roliki\\rolikiNOW\\Реклама - ALESA04032016.mp3';

console.log(path);

将输出:'D:\transfer\roliki\rolikiNOW\Реклама - ALESA04032016.mp3',这就是 Javascript 将其作为单个 \ 处理的方式,这是一条有效的路径。您正在尝试通过使用 \\\\ 来实现 \\ (您在代码中看到的内容),但 Windows 不需要双反斜杠,它只需要一个。

您试图通过打印来模拟:'D:\\transfer\\roliki\\rolikiNOW\Реклама - ALESA04032016.mp3':'D:\\\\transfer\\\\roliki\\\\rolikiNOW\Реклама - ALESA04032016.mp3'

所以,我不知道所有的上下文,但是,这两行:

let source = arrPath[i].replace(/\\/g, "\\\\"); // change one slash to double
let destiny = pathToCollect.replace(/\\/g, "\\\\") + "\\\\" + path.parse(arrPath[i]).base; //destination directory
// ^^ this is wrong, very wrong, use path.join

应该是(假设 arrPath[i] & pathToCollect)是有效的路径。

const basename = path.parse(arrPath[i]).base;
const source = arrPath[i]; // I need to see what `arrPath` is
const destiny = path.join(pathToCollect, basename); //destination directory

您应该始终使用path.join 而不是使用字符串连接。

更新:

你的 arrPath 数组是错误的。

如果您对这些路径进行了硬编码,则应转义反斜杠,否则,\t 是制表符,\r 是回车符。

const arrPath = [
"D:\transfer\roliki\rolikiNOW\Реклама - ALESA04032016.mp3",
"D:\transfer\roliki\rolikiNOW\Реклама - MnogoMebeli.mp3",
"D:\transfer\roliki\rolikiNOW\Реклама - ВИ.mp3"
];

应该是:

const arrPath = [
"D:\\transfer\\roliki\\rolikiNOW\\Реклама - ALESA04032016.mp3",
"D:\\transfer\\roliki\\rolikiNOW\\Реклама - MnogoMebeli.mp3",
"D:\\transfer\\roliki\\rolikiNOW\\Реклама - ВИ.mp3"
];

const wrongPaths = [
"D:\transfer\roliki\rolikiNOW\Реклама - ALESA04032016.mp3",
"D:\transfer\roliki\rolikiNOW\Реклама - MnogoMebeli.mp3",
"D:\transfer\roliki\rolikiNOW\Реклама - ВИ.mp3"
];

const correctPaths = [
"D:\\transfer\\roliki\\rolikiNOW\\Реклама - ALESA04032016.mp3",
"D:\\transfer\\roliki\\rolikiNOW\\Реклама - MnogoMebeli.mp3",
"D:\\transfer\\roliki\\rolikiNOW\\Реклама - ВИ.mp3"
];

console.log('Bad:')
for(const path of wrongPaths)
console.log(path);

console.log('Ok:')
for(const path of correctPaths)
console.log(path);

关于node.js - 为什么 fs.copySync 没有按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50593078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com