原本将自动化测试在中,失败的文件复制到一个failed文件夹里,但是发现错误文件太多的话,不太好区分这些文件原本属于哪个目录结构,毕竟在原文件的目录结构里,对这些文件进行了区分,所以修改代码,连同原有的目录结构一快复制过去
一、新增一个方法
/**下述方法主要对目录结构做一个简单的提取及拼接
根据实际情况,去除掉文件名和前面最前面的两层目录
并且循环去创建目录,由于dir默认值是"\\",所有dirpath后面不需要带"\\"
如copyDir("D://","D://test/new/project/index.html")应写成
copyDir("D:","D://test/new/project/index.html")
*/
function copyDir(dirpath, filepath) {
if (filepath !== undefined) {
let arr = filepath.split("\\");
let dir = '\\';
for (let i = 2; i < arr.length - 1; i++) {
if (!fs.existsSync(dirpath + dir + arr[i])) {
dir = dir + arr[i] + "\\";
fs.mkdirSync(path.join(dirpath + dir), function (error) {
if (error)
return error
})
}
else
dir = dir + arr[i] + "\\";
}
return path.join(dirpath + dir)
}
}
二、修改原有的copy方法
function createDir(dirpath, file) {
let exist = fs.existsSync(dirpath)
if (exist) {
copy(dirpath, file)
} else {
fs.mkdir(dirpath, function (error) {
if (error)
return error
})
copy(dirpath, file)
}
}
function copy(dirpath, file) {
let fileName = getFileName(file)
let dir = copyDir(dirpath, file)
if (dir !== undefined) {
let failedPath = path.join(dir, fileName)
if (!fs.existsSync(failedPath)) {
let readSteam = fs.createReadStream(file);
let writeSteam = fs.createWriteStream(failedPath);
readSteam.pipe(writeSteam)
} else
return 'file already exists'
}
}
function getFileName(filepath) {
let arr;
if (filepath !== undefined) {
arr = filepath.split("\\");
return arr[arr.length - 1]
}
}
三、最终效果如下