typescript 如何删除嵌套文件夹中的特定文件

8tntrjer  于 2023-02-17  发布在  TypeScript
关注(0)|答案(2)|浏览(268)

我一直在尝试删除嵌套目录中的特定文件。

import Express from 'express';
import { baseURL } from '..';
import fs from 'fs';
import path from 'path';
import { GuestFile } from '../models/guest-file';

export const GuestDelete = async (request: Express.Request, response: Express.Response) => {
const { identifier } = request.params;

const find_file = await GuestFile.findOne({ identifier });

if (!find_file) {
return response.status(404).json({ error: 'File not found', success: false });
}

const local_file_path = find_file.file_url?.split(`${baseURL}`).pop();
const file_name = local_file_path?.split('/')?.splice(-1)[0];

// Here is where the problem is *********
fs.readdirSync(path.join(__dirname + `/uploads/${find_file.type}s/`)).find((file) =>      console.log(file));

console.log('file_name', file_name);

response.status(204).json({ success: true, identifier });
};

// deleteFileAfterDelay();

'
因此,我首先尝试从数据库中删除该文件,然后从本地上载中删除它,如图所示,uploads文件夹有一个子目录。我希望能够Map子目录中的所有文件,如果file_namefile匹配,则I fs.unlinkSyn,但不断出现错误。最后路径为C:\\Users\\essel_r\\Desktop\\everfile\\backend_api\\\src\\controllers\\uploads\\images\\
目录如下所示:Image of the directory structure
我尝试使用fs.unlinkSyn(),但无法正常工作:fs.readdirSync('/uploads/${find_file.type}/').find((file) => file === file_name && fs.unlinkSync(file_name));我还尝试使用fs.access()来检查文件是否存在,但也不起作用。

wgx48brx

wgx48brx1#

我尝试运行您的代码。我更改了'import fs from 'fs' =〉'const fs = require('fs ')'和'import path from 'path' =〉'const path = require('path ')'
而且在我的情况下,效果很好。

//import fs from 'fs';
const fs = require('fs')
// import path from 'path';
const path = require('path')

fs.readdirSync(path.join(__dirname + `/uploads/subDir`)).find((file) =>
  console.log(file)
);
wpx232ag

wpx232ag2#

在昨晚和今天早上尝试了很多之后,这就是我是如何做到的,所以我会很好地解释它。

import fs from 'fs'
import path from 'path'

const directory = path.join(__dirname, '..', 'src', 'uploads', 'images')
const file_to_delete = '1676410030129-screen.webp'

src、****上载、images是我的文件夹结构中的嵌套目录。

src
 -index.ts
 -controllers
 -models
 _uploads
    -images
      -1676410030129-screen.webp
    -audio
    -videos

代码:

fs.readdir(f, (error, files) => {
if (error) throw new Error('Could not read directory');

files.forEach((file) => {
const file_path = path.join(f, file);
console.log(file_path);

fs.stat(file_path, (error, stat) => {
  if (error) throw new Error('File do not exist');
  
  if(stat.isDirectory()){
    console.log('The file is actually a directory')
  }else if (file === file_to_delete ) {
    fs.unlink(file_path, (error)=> {
      if (error) throw new Error('Could not delete file');
        console.log(`Deleted ${file_path}`);
    })
  }

    });
   });
  });

**解释:我们首先读取所需文件的目录,然后如果遇到错误,当我们抛出错误时,或者我们得到文件,这是一个数组,我们抓取每个文件,然后将目录加入文件,所以我们得到类似“C:\Users\..\Desktop\..\..\src\uploads\images\1676410030129-screen.webp“的东西,然后我们使用fs.stat检查文件的路径是否存在,如果文件不存在,我们抛出错误,或者我们也检查实际文件的路径是否是stat.isDirectory()目录,如果是真,我们console.log('The file is actually a directory),如果是假,然后我们转到代码的下一行,检查文件是否是C:\User\..\1676410030129-screen.webp严格等于file_to_delete**然后我们删除文件,否则我们抛出另一个错误。
**完整代码:**index.ts

import fs from 'fs'
import path from 'path'

const directory = path.join(__dirname, '..', 'src', 'uploads', 'images')
const file_to_delete = '1676410030129-screen.webp'

fs.readdir(f, (error, files) => {
if (error) throw new Error('Could not read directory');

files.forEach((file) => {
const file_path = path.join(f, file);
console.log(file_path);

fs.stat(file_path, (error, stat) => {
if (error) throw new Error('File do not exist');

if(stat.isDirectory()){
console.log('The file is actually a directory')
}else if (file === file_to_delete ) {
fs.unlink(file_path, (error)=> {
  if (error) throw new Error('Could not delete file');
    console.log(`Deleted ${file_path}`);
 })
 }

  });
 });
});

了解更多Info

相关问题