根据条件过滤出数据,并将对应文件复制到指定目录

2024-07-04  本文已影响0人  zhuyx0304
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...')
上一篇 下一篇

猜你喜欢

热点阅读