0

我在这里有一个相当直截了当的问题,但每次我必须处理文件路径和名称的验证时,我似乎都会重新审视自己。所以我想知道System.IO框架中是否有可用的方法或其他库可以让我的生活更轻松!?

让我们举一个人为的例子,该方法采用文件路径和文件名,并从这些输入中格式化并返回唯一的完整文件位置。

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

我知道我必须执行以下操作才能以正确的格式获取路径,以便我可以附加 guid 和文件名:

  • 如果 filePath 为 null 或为空,则抛出异常
  • 如果 filePath 不存在则抛出异常
  • 如果没有有效的后缀'/',则添加一个
  • 如果它包含后缀“\”,则删除并替换为“/”

有人可以告诉我是否有一种框架方法可以做到这一点(特别是前斜杠/反斜杠逻辑)来实现这种重复逻辑?

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 回答