1

プログラムがSharePointファイルのインポートで「不正な文字」としてリストしているファイルの名前を変更しようとしています。私が参照している不正な文字は次のとおりです。〜#%&* {} / \ | :<>?-""

私がやろうとしているのは、ドライブを再帰的に実行し、ファイル名のリストを収集してから、正規表現を使用して、リストからファイル名を選択し、実際のファイル名自体の無効な文字を置き換えてみることです。

誰かがこれを行う方法を知っていますか?これまでのところ私はこれを持っています:(覚えておいてください、私はこのようなものの完全なn00bです)

class Program
{
    static void Main(string[] args)
    {
        string[] files = Directory.GetFiles(@"C:\Documents and Settings\bob.smith\Desktop\~Test Folder for [SharePoint] %testing", "*.*", SearchOption.AllDirectories);
        foreach (string file in files)
        {
            Console.Write(file + "\r\n");


        }
        Console.WriteLine("Press any key to continue...");
        Console.ReadKey(true);



        string pattern = " *[\\~#%&*{}/:<>?|\"-]+ *";
        string replacement = " ";
        Regex regEx = new Regex(pattern);

        string[] fileDrive = Directory.GetFiles(@"C:\Documents and Settings\bob.smith\Desktop\~Test Folder for [SharePoint] %testing", "*.*", SearchOption.AllDirectories);
        StreamWriter sw = new StreamWriter(@"C:\Documents and Settings\bob.smith\Desktop\~Test Folder for [SharePoint] %testing\File_Renames.txt");
        foreach(string fileNames in fileDrive)
        {

        string sanitized = regEx.Replace(fileNames, replacement);
        sw.Write(sanitized + "\r\n");
        }
        sw.Close();



    }






}

したがって、私が理解する必要があるのは、これらの無効な文字を再帰的に検索し、実際のファイル名自体に置き換える方法です。誰かアイデアはありますか?

4

2 に答える 2

1

File.Move()は、ファイルの名前を効果的に変更します。基本的に、あなたはただする必要があります

File.Move(fileNames, sanitized);

後者のループ内。

アラート-ファイル名が重複している可能性があるため、sanitized変数の最後にカウンターを追加するなど、これを回避するためのポリシーを確立する必要があります。また、適切な例外処理を適用します。

PS:確かに、のような文字を検索する必要はありません:\*

于 2010-06-10T15:50:52.463 に答える
1

ファイルとディレクトリを再帰的に操作する場合、静的メソッドの代わりにDirectoryInfoクラスとそのメンバーを使用する方が多くの場合簡単です。事前に構築されたツリー構造があるため、自分で管理する必要はありません。

GetDirectoriesはより多くのDirectoryInfoインスタンスを返すため、ツリーをたどることができますが、GetFilesはFileInfoオブジェクト を返します。

この男は、ファイル情報を再帰的に生成するカスタムイテレーターを作成しました。これを既存の正規表現作業と組み合わせると、ソリューションが完成します。

于 2010-06-10T15:57:41.263 に答える