recursionまたはlinqのいずれかを使用してディレクトリツリーを歩いて "C:\ Program Files(x86)\ Folder1 \"という形式のファイル名を取得する方法を考えてみましょう。 Folder2 \ TargetParentFolder \ TargetFolder \ TargetFolderName.ext "基本的にファイル名はフォルダ名と同じで、既知のファイル拡張子を持ち、TargetFolderディレクトリにあります。私は "TargetFolderName.ext"ファイルを開くには、そのファイル内の特定の文字列を見つける(文字列は常にファイル内にある)文字列を変更し、ファイルを保存して閉じてTargetParentFolderにディレクトリツリーを移動する移動次のサブフォルダを取得次のTargetFolderのファイルに対する変更を繰り返します。これまでのところ私が持っているものである。この: FileInfoとLinqを使用したファイル自動化
FolderBrowserDialog folderPicker = new FolderBrowserDialog();
if (folderPicker.ShowDialog() == DialogResult.OK)
{
lsvAddons.Items.Clear();
List<string> folders = new List<string>(Directory.EnumerateDirectories(folderPicker.SelectedPath));
foreach (var folder in folders)
{
var folderName = Path.GetDirectoryName(Path.GetDirectoryName(folder));
var file = Directory.GetFiles(folderName, "*.toc", SearchOption.AllDirectories)
.FirstOrDefault();
ListViewItem item = new ListViewItem(folderName);
item.Tag = folder;
lsvAddons.Items.Add(item);
}
}
は、理想的には、ListViewコントロールが、コレクションが移入された後、繰り返し変更するフォルダと一致する各ファイル名を保持するコレクションは存在しません。アイデア?
私は例外ハンドルを追加しますGetDirectoriesの周りにあるので、フォルダにアクセスできない場合、コードは引き続き実行されます。 – jdweng
それは驚くほどうまくいった!ありがとう!親foreachループとIOException FileNotFoundExceptionなどのような再帰foreachループで特定の例外処理を追加するように修正し、メッセージを確認するためにメッセージを確認するためにロガーを追加してから、WalkDirectoryTreeをボタンを押して検索パターンを入力し、置換値を入力して、ファイル内の必要な文字列を新しい値に変更します。 (基本版変更実施) – ScottJ