お問い合わせ
ChatGPTでtypeScript でフォルダ内 ファイルのみ削除する方法を聞いてみる
投稿日:2023-09-04
@prompta
(株)ブロックセブンスソフトウェア
ChatGPT
typeScript
フォルダ操作

# 概要

タイトルの通りですが、ファイルを削除する際にフォルダごと削除するのではなく
フォルダを残したまま、ファイルのみ削除してもらいます。

# 質問内容

typescript でフォルダ内 ファイルのみ削除する方法

# 回答

TypeScriptを使用してフォルダ内のファイルを削除するには、Node.jsの標準モジュールであるfs(ファイルシステム)モジュールを使用することができます。以下は、フォルダ内のファイルを削除する基本的なコード例です。

まず、Node.jsをインストールして、プロジェクトのルートディレクトリに移動してから、次のステップを実行します。

fs モジュールをインポートします。
削除対象のフォルダパスを指定します。
fs.readdir を使用してフォルダ内のファイル一覧を取得します。
取得したファイル一覧をループして、各ファイルを削除します。
以下は、TypeScriptでフォルダ内のファイルを削除するコードの例です:

import * as fs from 'fs';
import * as path from 'path';

// 削除対象のフォルダパス
const folderPath = './path/to/your/folder';

// フォルダ内のファイル一覧を取得
fs.readdir(folderPath, (err, files) => {
  if (err) {
    console.error(`Error reading directory: ${err}`);
    return;
  }

  // ファイルを一つずつ削除
  files.forEach((file) => {
    const filePath = path.join(folderPath, file);
    fs.unlink(filePath, (unlinkErr) => {
      if (unlinkErr) {
        console.error(`Error deleting file ${filePath}: ${unlinkErr}`);
      } else {
        console.log(`Deleted file: ${filePath}`);
      }
    });
  });
});

このコードでは、指定したフォルダ内のすべてのファイルが削除されます。フォルダ自体は削除されません。フォルダも削除したい場合は、fs.rmdir メソッドを使用してフォルダを削除できます。ただし、フォルダが空でない場合は削除できないため、事前にフォルダ内のファイルを削除する必要があります。

# 追加で修正依頼

回答にあるとおり、フォルダ内のフォルダを再起的に削除する場合は別の方法を考量する必要がありますが、今回はこのケースに該当しない為そのまま追加で質問します。
readdirを使ってコールバックメソッドでファイルを削除する挙動をしていますが、
こちらをreaddirSyncに書き換えてもらいます。

fs.readdirをreaddirSync に変えたコードで書き換えて下さい。

# 修正内容の回答

fs.readdirSyncを使用して同期的にフォルダ内のファイルを削除するには、次のようにコードを書き換えることができます

import * as fs from 'fs';
import * as path from 'path';

// 削除対象のフォルダパス
const folderPath = './path/to/your/folder';

try {
  // フォルダ内のファイル一覧を取得
  const files = fs.readdirSync(folderPath);

  // ファイルを一つずつ削除
  files.forEach((file) => {
    const filePath = path.join(folderPath, file);
    fs.unlinkSync(filePath);
    console.log(`Deleted file: ${filePath}`);
  });
} catch (err) {
  console.error(`Error deleting files: ${err}`);
}

このコードは、fs.readdirSyncを使用してフォルダ内のファイル一覧を同期的に取得し、それらのファイルを同期的に削除します。同期的に実行されるため、ファイルが削除されるまで次のファイルの削除処理は待機します。エラーハンドリングも追加しています。