const fs = require('fs').promises;
const path = require('path');
const { points, routes, scenics } = require('./data.js');
// async function copyFile(src, dest) {
// try {
// await fs.mkdir(path.dirname(dest), { recursive: true });
// await fs.copyFile(src, dest);
// console.log(`File copied successfully!`);
// } catch (err) {
// console.error(err);
// }
// }
async function copyFile(src, dest) {
const maxRetries = 10;
const retryDelay = 5000; // 1秒
let retries = 0;
while (retries < maxRetries) {
try {
await fs.mkdir(path.dirname(dest), { recursive: true });
await fs.copyFile(src, dest);
console.log(`File copied successfully!`);
return;
} catch (err) {
if (err.code === 'EBUSY') {
retries++;
console.log(`File is busy or locked. Retrying in ${retryDelay / 1000} seconds...`);
await new Promise(resolve => setTimeout(resolve, retryDelay));
} else {
throw err;
}
}
}
throw new Error('Failed to copy file after multiple retries.');
}
const sourcePath = path.join('F:/'); // 源文件路径
const outputPath = path.join('C:/output/'); // 输出文件路径
function run() {
routes.forEach(route => {
const list = points.filter(item => {
return item.line && item.line.includes(route);
})
list.forEach(item => {
const fileName = item.fileName + '.jpg';
const source = path.join(sourcePath, fileName);
const destination = path.join(outputPath, `${route}/${fileName}`);
copyFile(source, destination);
})
})
scenics.forEach(scenic => {
const list = points.filter(item => {
return item.scene && item.scene.includes(scenic);
})
list.forEach(item => {
const fileName = item.fileName + '.jpg';
const source = path.join(sourcePath, fileName);
const destination = path.join(outputPath, `${scenic}/${fileName}`);
copyFile(source, destination);
})
})
}
run();
console.log('run...')
网友评论