0

ここでかなり率直な質問がありますが、ファイルのパスと名前の検証に対処する必要があるたびに、自分自身を再訪しているようです. System.IOそれで、私の人生を楽にすることができる方法やフレームワークの他のライブラリがあるかどうか疑問に思っています!?

ファイル パスとファイル名を受け取り、これらの入力からフォーマットして一意の完全なファイルの場所を返すメソッドの不自然な例を見てみましょう。

public string MakeFileNameUnique(string filePath, string fileName)
{
    return filePath + Guid.NewGuid() + fileName;
} 

GUIDとファイル名を追加できるように、パスを正しい形式で取得するには、次の手順を実行する必要があることを知っています。

  • filePath が null または空の場合は、例外をスローします
  • filePath が存在しない場合は、例外をスローします
  • 有効な接尾辞「/」がない場合は追加します
  • 接尾辞「\」が含まれている場合は、削除して「/」に置き換えます

この反復的なロジックを実現するために、これを実行できるフレームワークメソッド (特にforwareslash/backslashロジック)があるかどうか教えてもらえますか?

4

2 に答える 2

3

メソッドをお探しですかPath.Combine:

public string MakeFileNameUnique(string filePath, string fileName)
{
    return Path.Combine(filePath, Guid.NewGuid().ToString(), fileName);
} 

メソッドの名前 ( MakeFileNameUnique) を見て、メソッドの使用を検討しましたPath.GenerateRandomFileNameか? それともPath.GetTempFileName方法?

于 2013-01-24T11:34:29.957 に答える
1

あなたの要件に従って、これは行います

public string MakeFileNameUnique(string filePath, string fileName)
{
    // This checks for nulls, empty or not-existing folders
    if(!Directory.Exists(filePath))
        throw new DirectoryNotFoundException();

    // This joins together the filePath (with or without backslash) 
    // with the Guid and the file name passed (in the same folder)
    // and replace the every backslash with forward slashes
    return Path.Combine(filePath, Guid.NewGuid() + "_" + fileName).Replace("\\", "/");
} 

との電話

string result = MakeFileNameUnique(@"d:\temp", "myFile.txt");
Console.WriteLine(result);

結果として

d:/temp/9cdb8819-bdbc-4bf7-8116-aa901f45c563_myFile.txt

ただし、バックスラッシュをスラッシュに置き換える理由を知りたい

于 2013-01-24T11:39:25.500 に答える