如何验证字符串提供的文件路径是否为有效的目录格式?

时间:2013-01-24 11:32:43

标签: c# .net file-io

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

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

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

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

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

有人可以告诉我是否有框架方法可以实现这一点(特别是 forwareslash / backslash 逻辑)可用于实现这种重复逻辑吗?

2 个答案:

答案 0 :(得分:3)

您是否正在寻找Path.Combine方法:

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

但是查看方法的名称(MakeFileNameUnique),您是否考虑过使用Path.GenerateRandomFileName方法?还是Path.GetTempFileName方法?

答案 1 :(得分: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

但是我希望知道用正斜杠替换反斜杠的原因