ホームページ  >  記事  >  バックエンド開発  >  新しい io.FS を fs.WalkDir に使用し、ファイル システム タイプ全体でファイルをリストします。

新しい io.FS を fs.WalkDir に使用し、ファイル システム タイプ全体でファイルをリストします。

WBOY
WBOY転載
2024-02-10 10:09:081124ブラウズ

使用新的 io.FS 到 fs.WalkDir 并列出跨文件系统类型的文件

php エディタ Strawberry では、特に fs.WalkDir を使用してファイル システム タイプ全体でファイルを一覧表示する場合、新しい io.FS を使用してファイル システムを操作することをお勧めします。この新機能により、ファイル操作をより柔軟に処理できるようになり、ユーザーは必要なファイル情報をより簡単に取得できるようになります。この機能により、開発プロセスでも保守プロセスでも、効率が大幅に向上し、面倒な作業が軽減されます。より詳しい使い方を知りたい方は、詳しい手順や注意事項をご紹介しますので、このまま読み進めてください。

質問の内容

新しい io.FS 抽象化を使用してファイル システムを横断し、内部ファイル拡張子に一致する各ファイルの最初の 128 バイトを読み取ります。

これらのファイルは、ローカル ファイル システムやアーカイブ ファイルなど (ZIP と Tar だと思います) にあります。

私は fs.WalkDir を使用し、fs.FS (テストでは os.DIR と fstest.MapFS) を渡します。ウォーキング中は、一連の「ファイル」を返します (実際には、これらは *.pzix および *.pzi ファイルであり、当社独自の形式です)。作業中のファイルに関する情報を取得するために FS インターフェイスを使用する適切な方法が見つかりません。

###欲しい:###

ファイル名を取得
  • ファイルサイズの取得
  • openfile メソッドを取得する
  • Go の Java/C# のインターフェイスは少しわかりにくいと思います。抽象化を操作したいのですが、ファイル自体の他の実装を取得する方法がわかりません(たとえば、ファイルインターフェイスには Stat() と read があります)。

私が見つけた最も簡単な方法は、パスとファイル名を配列に格納し、配列を反復処理するときに、それが os.Dir であるか fstest.MapFS であるかを判断することですが、これはかなり直観に反するようです:

リーリー

これにより、次のようになります: リーリー

これらのことを行わずに抽象化を処理する、より賢い方法はありますか?配列を返した後、ファイルを「開き」、最初の 128 バイト (署名) を読み取り、ファイルの残りの部分をハッシュして、ファイルが「有効」であることを確認する必要があるからです。

編集: 明確にするために、

collectFiles

メソッドは、別のメソッドで処理されるメイン ファイル ヒット リストを作成しています。ローカル システム ファイル、zip ファイル、tar ファイルをメソッドに渡して、アーカイブ内のファイルを反復処理して配列に追加できるようにしたいと考えています。 文字列ではなく配列に格納できる File インターフェイスがあれば、後続の呼び出し元は基礎となるものが何かを知らなくても f.open() を実行できるようになります。

Solution

p

はファイル システム内の名前です。 fs.Stat(f, p)

を呼び出してサイズを取得します。

f.Open(p) を使用してファイルを開きます ###例:### リーリー

簡潔にするために、この例ではエラーを無視しています。実際のコードではこれを行わないでください。

https://www.php.cn/link/b599e8250e4481aaa405a715419c8179

以上が新しい io.FS を fs.WalkDir に使用し、ファイル システム タイプ全体でファイルをリストします。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。