我尝试将文件从一个目录复制并粘贴到另一个目录,并且出现错误错误:ENOENT:没有这样的文件或目录,stat'D:\ transfer \ roliki \ rolikiNOW \Реклама - ALESA04032016.mp3',虽然路径和文件存在。如果我“手动”向fs.copeSync提供arg,那么它可以正常工作
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');
答案 0 :(得分:2)
你做错了。这个:\\\\
毫无意义。请记住,您在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]
&amp; 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);