为什么我得到NotSupportedException:不支持给定路径的格式?

时间:2014-10-26 06:13:10

标签: c# .net winforms

我创建了这个方法:

private string GetDirectoryName(string baseString, string baseName, int startAt)
{
            int i = startAt;

            while (Directory.Exists(Path.Combine(baseString, baseName + i.ToString("D6")+"_"+DateTime.Now)))
            {
                i++;
            }
            return Path.Combine(baseString, baseName + i.ToString("D6") + "_" + DateTime.Now);
}

我在原始版本中添加了DateTime.Now,方法如下:

private string GetDirectoryName(string baseString, string baseName, int startAt)
{
            int i = startAt;

            while (Directory.Exists(Path.Combine(baseString, baseName + i.ToString("D6"))))
            {
                i++;
            }

            return Path.Combine(baseString, baseName + i.ToString("D6"));
}

然后我根据需要创建目录:

string eventDir = GetDirectoryName(AnimatedGifDirectory, "Rain event ", 1);

if (!Directory.Exists(eventDir))
{
   Directory.CreateDirectory(eventDir);
}

在使用DateTime.Now之前,它工作正常,但在添加DateTime.Now之后我得到了例外。

这是一个示例eventDir包含例外的目录的示例:

C:\test\Rain event 000001_10/26/2014 8:09:12 AM

方法创建的目录名是这部分:

Rain event 000001_10/26/2014 8:09:12 AM

也许2014年到8点和12点到AM之后的空间会出现这个问题?也许目录名称应该是这样的:

Rain event 000001_10/26/2014_8:09:12_AM ?

我想做的是,只创建Rain事件000001和Rain事件000002以及Rain事件000003之类的目录,这些目录将为每个事件和id提供一些事件。

所以也许以某种方式添加日期和时间。这样的事情。所以这些目录仍然是Rain事件000001,但是后面有一些日期和时间id。

4 个答案:

答案 0 :(得分:4)

这是:字符,它是Windows操作系统中的非法路径字符。请参阅MSDN

您还可以调用Path.GetInvalidPathChars方法来查明路径字符串中的char是否无效。

答案 1 :(得分:2)

您对DateTime的使用会导致目录名称成为非法字符,您可以使用DateTime.Now.ToFileTime()作为当前时间的数字表示(如果您同时执行此操作,则不一定是唯一的)在循环中。)

答案 2 :(得分:1)

根据Directory.CreateDirectory的MSDN文档,如果目录名称包含不属于驱动器标签的冒号,则抛出NotSupportedException。当您包含DateTime时,在目录名称中包含冒号。

答案 3 :(得分:0)

\ / : * ? " < > | 

以上所有文件名均无效。