IRONSOFTWAREHOME

C#システムファイルのマスター

C# システムファイルのマスター

Tim Corey

35分07秒

C#は、ファイルシステムと対話するための堅牢な機能を提供し、ファイル操作、ディレクトリ管理、情報検索などのタスクを可能にします。 動画"Working With The File System in C# - Managing Folders and Files"では、ティム・コーリー(Tim Corey)が C# を使用してファイルとディレクトリを操作する基本について説明します。

この記事は、C#におけるファイルシステム操作の包括的な概要を提供することを目的としており、タスクの自動化、ディレクトリの管理、ファイルの処理に不可欠なテクニックに焦点を当てています。

はじめに

C#では、System.IO名前空間は、ファイルシステムと対話するための強力なクラスを提供します。 これらのクラス、例えばDirectoryInfoは、ファイルを作成する、データを読み取る、ファイルに書き込む、指定されたパスに既にファイルが存在するかどうかを確認するなど、さまざまなファイル操作を実行することができます。 これらのクラスを使用すると、テキストファイル、バイナリファイル、およびさまざまな拡張子のファイルを扱うことができます。 Delete()のようなメソッドは、開発者がファイルやディレクトリを効果的に管理することを可能にします。

例えば、Fileクラスにはファイルが既に存在するか確認するための静的メソッド、新しいファイルを作成するためのメソッド、または読み取り、書き込み、追加など異なるモードでファイルを開くためのメソッドが含まれています。 ファイルの作成時間や完全なパスなど、ファイルに関する詳細情報を取得する際には、FileInfoクラスを使用することができます。 DirectoryInfoクラスを使用すれば、ディレクトリの操作やファイルの取得、新しいディレクトリの作成が可能です。 これらのクラスとメソッドは、既存ファイルと新規ファイルの両方を処理し、複数のファイルを管理し、さらにバイトレベルでファイルデータを処理する柔軟性を提供し、C#をファイルシステム操作のための強力なツールにしています。

ティムは、バックアップの作成、ファイルの整理、ファイル情報の取得など、ファイルタスクの自動化のためのC#の強力な機能を強調することから始めます。 彼は、実践的な例とトレーニングリソースを通じて、C#の学習を容易にするという目標を述べて、ビデオを紹介しています。

デモ コンソール アプリケーションの作成

Timはゼロから始め、.NET Frameworkを使って"FileSystemDemo"という新しいコンソールアプリケーションを作成します。 このデモでは、.NET Coreよりも.NET Frameworkを選択したことを強調しています。

using System;
using System.IO;

namespace FileSystemDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ReadLine();
        }
    }
}

ルートパスの設定

Timは、デモ用にシステム上の特定のディレクトリを指すルートパス変数を設定します。

string rootPath = @"C:\temp\demos\filesystem";

彼は、@シンボルを使用すると、パス内のバックスラッシュをエスケープする必要がないことを説明しています。

パス内のすべてのディレクトリを読み取ります

ティムは、Directory.GetDirectoriesメソッドを使用して、指定されたルートパス内のすべてのディレクトリを取得する方法を示します。

string[] directories = Directory.GetDirectories(rootPath);
foreach (string directory in directories)
{
    Console.WriteLine(directory);
}

このコードは、ルートディレクトリ内のすべてのサブディレクトリのフルパスを表示します。

ディレクトリリスト

再帰的にサブディレクトリを読み取る

検索にサブディレクトリを含めるために、ティムはGetDirectoriesメソッドに検索パターンと検索オプションを追加します。

string[] allDirectories = Directory.GetDirectories(rootPath, "*", SearchOption.AllDirectories);
foreach (string directory in allDirectories)
{
    Console.WriteLine(directory);
}

この修正により、すべてのネストしたサブディレクトリが検索に含まれるようになります。

パス内のすべてのファイルの読み取り

ティムは、ディレクトリクラスと指定したルートパス内のすべてのファイルをDirectory.GetFilesメソッドを使用して取得する方法を示します。

string[] files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);
foreach (string file in files)
{
    Console.WriteLine(file);
}

このコードは、ルートディレクトリとそのサブディレクトリ内のすべてのファイルのフルパスを表示します。

ファイルリスト

ファイル名とパスを抽出する

ティムは、Pathクラスを使用してファイル名とパスを抽出する方法を説明しています。 これには、拡張子を除いたファイル名と各ファイルのディレクトリ名の取得も含まれます。

foreach (string file in files)
{
    Console.WriteLine(Path.GetFileName(file)); // File name with extension
    Console.WriteLine(Path.GetFileNameWithoutExtension(file)); // File name without extension
    Console.WriteLine(Path.GetDirectoryName(file)); // Directory name
}

このコード・スニペットは、指定されたパスにある同じファイルの異なる部分を抽出して印刷する方法を示しています。

ファイル情報の取得

ティムは(12:10)、FileInfoクラスを使用してファイルの詳細情報を取得する方法をデモンストレーションしています。 これには、ファイルサイズ、最終アクセス時刻、作成時刻、その他の属性の取得が含まれます。

foreach (string file in files)
{
    FileInfo info = new FileInfo(file);
    Console.WriteLine($"{Path.GetFileName(file)}: {info.Length} bytes");
}

このコード・スニペットは、ファイル名とそのサイズをバイト単位で表示します。 ティムは、このサイズを1024で繰り返し割ることでキロバイトやメガバイトに変換できると述べている。

彼はさらに、FileInfoクラスが他にも有用なプロパティを提供していることを説明します。

  • LastWriteTime: ファイルが最後に変更された時間。

  • LastAccessTime: ファイルが最後にアクセスされた時間。

  • CreationTime: ファイルの作成時間。

  • Attributes: 読み取り専用やアーカイブなどのファイル属性。

Automating File System Tasks with C#

15:11)のティムは、さまざまなファイルシステムのタスクを自動化するためにC#を使用する方法について説明します。 これには、ディレクトリの作成、ファイルやディレクトリの存在の確認、その他の反復作業が含まれます。

ディレクトリが存在するかどうかの確認

ティムは、Directory.Existsメソッドを使用してディレクトリが存在するかどうかを確認する方法を示します。 これは、操作を実行する前に必要なディレクトリが配置されていることを確認するのに役立ちます。

string newPath = @"C:\temp\demos\filesystem\subfolderC";
if (Directory.Exists(newPath))
{
    Console.WriteLine("Directory exists");
}
else
{
    Console.WriteLine("Directory does not exist");
}

このコードは、ディレクトリの存在をチェックし、適切なメッセージを表示します。

新しいディレクトリの作成

ティムは、Directory.CreateDirectoryメソッドを使用して新しいディレクトリを作成する方法を説明します。 このメソッドは、指定されたパスにすべてのディレクトリとサブディレクトリが存在しない場合に作成します。

string newPath = @"C:\temp\demos\filesystem\subfolderC\sub-subfolderD";
Directory.CreateDirectory(newPath);
Console.WriteLine("Directories created");

Tim は、このメソッドが、既存のファイルやディレクトリを上書きすることなく、指定されたパスとそのサブディレクトリを作成することを示します。

ファイルのコピー

ティムは(21:35)で、File.Copyメソッドを使用してあるディレクトリから別のディレクトリにファイルをコピーする方法をデモンストレーションしています。 ファイルをバックアップしたり、ファイルを別のフォルダに整理したりする際に役立ちます。

string[] files = Directory.GetFiles(rootPath);
string destinationFolder = Path.Combine(rootPath, "subfolderA");

foreach (string file in files)
{
    string destFile = Path.Combine(destinationFolder, Path.GetFileName(file));
    File.Copy(file, destFile, true);
}

この例では、ルートディレクトリからtrueパラメータの影響で既存のファイルが上書きされます。

コピー中のファイル名の変更

Timはまた、インデックス付きのforループを使用して、コピープロセス中にファイル名を変更する方法を示しています。

for (int i = 0; i < files.Length; i++)
{
    string destFile = Path.Combine(destinationFolder, $"{i}.txt");
    File.Copy(files[i], destFile, true);
}

このコードは、ファイルを宛先ディレクトリにコピーし、連番で1.txtなどとリネームします。

ファイルの上書きを処理する

ティムは、上書きせずに既存ファイルを処理し、例外を回避するために、上書きパラメータをfalseに設定する方法を説明します。 これは、既存のファイルが上書きされるのを防ぎ、ファイルがすでに存在する場合は例外をスローします。

try
{
    File.Copy(sourceFile, destFile, false);
}
catch (IOException ex)
{
    Console.WriteLine($"File already exists: {ex.Message}");
}

このアプローチは、ファイルのコピーを安全に管理し、ファイルを上書きしてはならない状況に対処するのに役立ちます。

ファイルの移動

ティムは(28:28)で、File.Moveメソッドを使用してファイルを移動する方法をデモンストレーションしています。 File.Moveメソッドには上書きオプションがなく、宛先ファイルが既に存在する場合に例外を発生させます。

string[] files = Directory.GetFiles(rootPath);
string destinationFolder = Path.Combine(rootPath, "subfolderA");

foreach (string file in files)
{
    string destFile = Path.Combine(destinationFolder, Path.GetFileName(file));
    File.Move(file, destFile);
}

このコードは、ルートディレクトリからsubfolderAにファイルを移動し、ソースディレクトリから削除します。

ユーティリティアプリの作成

Timは、ファイルシステムのタスクを自動化し、ユーティリティ・アプリケーションを作成するためにC#を使用できるさまざまな方法を考えるよう、開発者に勧めています。 簡単な作業から始め、徐々に複雑な自動化ソリューションを構築していくことを提案している。

ユーティリティアプリの例

  • 一時ファイルのクリーンアップ:一時ファイルを削除するプロセスを自動化し、空き領域を確保します。

  • 外付けドライブへのバックアップ:重要なファイルを外付けドライブにコピーするバックアップツールを作成します。

  • プロジェクトフォルダの同期:コンピュータとUSBメモリ間でプロジェクトフォルダを同期し、常に最新の変更がバックアップされ、復元されるようにします。

結論

ティム・コーリーによるC#でのファイルシステム操作の探求は、ファイルタスクの自動化とディレクトリ管理の実用的な洞察を提供します。 彼の例に従うことで、開発者は日常的なファイル管理タスクを効率的に自動化し、カスタム・ユーティリティ・アプリケーションを作成することができます。

これらの概念をより深く理解し、実際に見るには、ティム・コーリーのビデオの**ファイル システム in C#**をぜひご覧ください。 彼の詳細なウォークスルーと実用的な例は、理解を深め、独自のファイル管理アプリケーションを構築するのに役立ちます。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

OR
bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。