C#スタディノートファイル、ディレクトリ、レジストリ

ファイルはディスクに保存された情報のコレクションです。ディレクトリ、フォルダは複数のファイルを整理する方法です。レジストリは、さまざまな構成情報がオペレーティングシステムのLand(データベース)に保存される場所です。

ファイルとディレクトリの管理

C#はSystem.IO、名前空間内の関連クラスによって実装されるファイル管理とディレクトリ管理をサポートしています。これらのクラスは、コンテンツの入出力を担当しないため、StreamまたはTextReaderのサブクラスではありませんが、ディスクファイルとディレクトリを管理するために使用されます。
ファイルとディレクトリはSystem.IO、名前空間内の6つのクラスで表されます。

  • ①- FileSystemInfoFileInfoとDirectoryInfoの基本クラス
  • File操作するファイルのための-contains静的メソッド
  • ③-FileInfoファイルを表現して操作するために使用されます
  • ④——Directoryディレクトリを操作するための静的メソッドが含まれています
  • ⑤-DirectoryInfoディレクトリを表し、操作するために使用されます
  • 法律Path-パス情報を操作するために使用されます

1.FileSystemInfoクラス

FieSystemlnfoクラスは、FilelnfoおよびDirectorylnfoの基本クラスであり、ファイルおよびディレクトリを操作するために使用されます。このクラスは、ファイルやディレクトリで一般的に使用される多くのメソッドと属性を提供します。

2.ファイルクラス

次の表は、Fileクラスで提供されるメソッドです。
ここに画像の説明を挿入
Fileクラスを直接使用してコンテンツを読み取り、各行を表示します。

using System;
using System.IO;
class FileOpenText
{
    
    
	static void Main(){
    
    
		StreamReader sr = File.OpenText(".\\FileOpenText.cs");
		string contents = sr.ReadToEnd();
		sr.Close();
		string[] lines = contents.Split(new char[] {
    
     '\n' });
		for(int i = 0; i < lines.Length; i++)
			Console.WriteLine(i + ":\t" + lines[i]);
	}
}

けれどもFile.OpenText()、それは非常に便利ですが、それは(そのような漢字GBコードなど)は、異なる符号化方式でいくつかのファイルに直接使用することはできませんFile.OpenText()これを使用でき、encodingメソッドをFileStreamパッケージにStreamReader追加できますStreamReaderオブジェクトを直接生成してencodingメソッド(などEncoding.Defaultを指定することもできます

3.FileInfoクラス

FileInfoこのクラスは、ファイルパスを表すために使用されます。Fileクラスと違いは、そのすべてのメンバーが非static特定であるということです。一部の関数はFileFileInfoクラスまたはクラスで実装できます注:Fileクラスのすべてのメソッドには、セキュリティチェックが必要です。同じファイルに対して多くの操作を実行する場合はFileInfo、FileInfoオブジェクトが呼び出されるたびにセキュリティチェックを必要としないため、処理用オブジェクトを作成する方が効率的です。
FileInfoクラスのメソッドとプロパティは、その親クラスからFileSystemInfo継承さます。
ここに画像の説明を挿入
ここに画像の説明を挿入

4.ディレクトリクラス

Directoryこのクラスは、ディレクトリの作成、削除、移動、コピー、一覧表示などの操作を含む、ディレクトリを操作できる静的メソッドを提供します。Directoryオブジェクトは、名前という既存のディレクトリをパスを表すために使用することができ、または新しいディレクトリを作成するために使用することができます。
ここに画像の説明を挿入

5.DirectoryInfoクラス

DirectoryInfoクラスはディレクトリを表すために使用されます。DirectoryInfoオブジェクトは、いずれかの既存のディレクトリに名前を付けるために使用されるか、または新しいディレクトリを作成するために使用されるパスを表します。
ここに画像の説明を挿入
ここに画像の説明を挿入

6.パスクラス

Pathクラスを使用して、クロスプラットフォームの方法でファイルとディレクトリのパス名を処理します。このクラスのすべてのメソッドstaticは同じです。
ここに画像の説明を挿入
ここに画像の説明を挿入ここに画像の説明を挿入

たとえば、ListAlFiles.csは、ディレクトリ内のすべてのファイルを再帰的に一覧表示します。

using System;
using System.IO;
class ListAllFiles
{
    
    
	public static void Main(){
    
    
		ListFiles(new DirectoryInfo(@"C:\Users\Frenkie\Desktop"));
	}
	public static void ListFiles(FileSystemInfo info) {
    
    
		if (!info.Exists) return;

		DirectoryInfo dir = info as DirectoryInfo;
		if (dir == null) return;    // 不是目录

		FileSystemInfo[] files = dir.GetFileSystemInfos();
		for (int i = 0; i < files.Length; i++) {
    
    
			FileInfo file = files[i] as FileInfo;
			if (file != null)       // 是文件
				Console.WriteLine(file.FullName + "\t" + file.Length);
			else                    // 是目录				
				ListFiles(files[i]);// 对于子目录, 进行递归调用
		}
	}
}

ファイルとディレクトリへの変更を監視する

1.FileSystemWatcherクラス

FileSystemWatcher非常に便利なクラスであり、指定されたディレクトリ内のファイルとサブディレクトリの変更を監視できます。検出されたディレクトリは、ローカルマシン、ネットワークドライブ、またはリモートマシンのディレクトリである可能性があります。
プログラムでFileSystemWatcherオブジェクトを作成して、指定したディレクトリを監視できます。監視対象ディレクトリ内のファイルまたはサブディレクトリが作成、変更、または削除されると、オブジェクトは応答としてイベントを生成できます。

2.パスとフィルターの属性

FileSystemWatcherPath属性は、監視するディレクトリを示します。
Filterこの属性は、ディレクトリ内の特定のファイルを監視するために指定するために使用されます。たとえば、テキストファイルの変更を監視する場合は、Filterプロパティをに設定する必要があります"*.txt"特定のファイルのみが監視されている場合は、そのファイル名が使用されます。すべてのファイルの変更を監視するには、Filterプロパティを空の文字列("")に設定する必要がありますIncludeSubdirectoriesこの属性は、サブディレクトリを含めるかどうかを示すために使用されます。

3.NotifyFiltersプロパティ

ディレクトリまたはファイルのいくつかの変更を監視できます。たとえば、属性、LastWriteの日時、またはファイルやディレクトリのサイズの変更を監視できます。これは、FileSystemWatcher.NotifyFilter属性をNotifyFilters値の1つまたはそれらの組み合わせに設定することで実現されます。
ここに画像の説明を挿入

4.イベント

ファイルやディレクトリが変更さFileSystemWatcherれると、イベントを生成して応答できます。このとき、クライアントコードはイベントハンドラコードを実行する必要があります。
ここに画像の説明を挿入
一般的なファイルシステム操作により、複数のイベントが発生する場合があります。たとえば、あるディレクトリから別のディレクトリにファイルがある場合、いくつかのイベントChangedだけでなく、いくつかのイベントトリガーされる可能性がCreatedありDeletedます。ファイルの移動は、複数の単純な操作を含む複雑な操作であるため、複数のイベントがトリガーされます。同様に、一部のアプリケーション(ウイルス対策ソフトウェアなど)では、FileSystemWatcher追加のファイルシステムイベント検出される場合があります。
イベント処理のために使用する薬剤であるFileSystemEventHandlerRenamedEventHandlerイベント処理関数のパラメーターに加えobject senderFileSystemEventArgsイベント関連の情報を含む別のオブジェクトがあります。FieSystemEventArgsの最も便利なプロパティは次のとおりです。

  • ①-FullPathイベントの原因となったファイルまたはディレクトリのフルパスが含まれています
  • Name--onlyファイルまたはディレクトリの名前を含めます
  • ChangeType変更の種類を--Inform

RenamedEventArgs最も一般的に使用される属性があるOldFullPahFullPah、元の名前と名前後に、それぞれ、。
セットアッププログラムのEnableRaisingEventsプロパティtrueが表示されると、監視が開始されます。
イベントが多すぎて速すぎると、システムがより多くのバッファを必要とし、システム効率が低下する可能性があることに注意してください。したがって、合理的な使用FilterNotifyFilterおよびIncludeSubdirectoriesプロパティを使用して不要な変更通知を除外できます。
たとえば、Watcher。csはFileSystemWatcherを使用してファイルの変更を監視します。

using System;
using System.IO;
class Watcher
{
    
    
	public static void TestMain() {
    
    
		const string path = @"E:\Visual Studio 2019\C#\Mooc学习\ConsoleApp18流、文件IO\bin\Debug";

		FileSystemWatcher watcher = new FileSystemWatcher();
		watcher.Path = path;
		watcher.Filter = "*.txt";

		watcher.NotifyFilter = NotifyFilters.LastAccess |
			NotifyFilters.LastWrite | NotifyFilters.FileName |
			NotifyFilters.DirectoryName;

		// 事件处理函数
		watcher.Changed += OnChanged;
		watcher.Created += OnChanged;
		watcher.Deleted += new FileSystemEventHandler(OnChanged);
		watcher.Renamed += new RenamedEventHandler(OnRenamed);

		// 开始监视
		watcher.EnableRaisingEvents = true;

		// 等待用户输入q才结束程序
		Console.WriteLine("Press'q' to quit the sample.");
		while (Console.Read() != 'q') {
    
     }
	}

	// 事件处理函数
	private static void OnChanged(object sender, FileSystemEventArgs e) {
    
    
		// 显示哪些文件做了何种修改
		Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
	}
	private static void OnRenamed(object sender, RenamedEventArgs e) {
    
    
		// 显示被更改的文件名
		Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
	}
}

レジストリ

たとえば、RegistryDemo.csはレジストリを取得および設定します。

using Microsoft.Win32;
using System;
class RegistryDemo
{
    
    
	public static void TestMain() {
    
    
		// 获取信息
		RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main");
		string page = key.GetValue("Start Page") as string;
		Console.WriteLine("浏览器的起始页是" + page);

		// 设置信息
		RegistryKey test = Registry.CurrentUser.CreateSubKey("MyTest");
		using (RegistryKey mySetting = test.CreateSubKey("MySetting")) {
    
    
			mySetting.SetValue("ID", 123);
			mySetting.SetValue("Language", "Chinese");
			mySetting.SetValue("WindowSize", "Max");
			mySetting.SetValue("LastLogin", DateTime.Now.ToString());
		}

		// 查询信息
		RegistryKey setting = Registry.CurrentUser.OpenSubKey(@"MyTest\MySetting");
		foreach (string name in setting.GetValueNames())
			Console.WriteLine(name + ":" + setting.GetValue(name));
	}
}

操作結果:
ここに画像の説明を挿入
実際の作業では、プログラム内のいくつかの設定項目をレジストリに保存し、次回実行時にレジストリからこれらの登録項目を読み取ることができます。
注:レジストリを操作すると、システム障害が発生する可能性があります。Windowsレジストリに慣れていない場合は、レジストリを自由に操作しないようにしてください。さらに、一部のレジストリエントリでは、特定のアクセス許可を変更する必要があります。

おすすめ

転載: blog.csdn.net/qq_45349225/article/details/114552709