为什么我';m正在获取NotSupportedException:给定的路径';不支持s格式

本文关键字:路径 不支持 格式 获取 NotSupportedException 为什么 | 更新日期: 2023-09-27 18:27:47

我创建了这个方法:

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点至上午之后的空间会造成问题?也许目录名应该是这样的:

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

我想做的是,只创建像Rain事件000001、Rain事件00000 2和Rain事件0000003这样的目录,因为它是一个event,所以会给每个事件和id。

所以,也许可以以任何方式添加日期和时间。类似的东西。因此,目录仍然是Rain事件000001,但后面有一些日期和时间id。

为什么我';m正在获取NotSupportedException:给定的路径';不支持s格式

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

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

使用DateTime会导致目录名出现非法字符,或者您可以使用DateTime.Now.ToFileTime(),它是当前时间的数字表示(如果同时或循环执行,则不一定是唯一的)。

根据MSDN Directory.CreateDirectory文档,如果目录名包含不属于驱动器标签的冒号,则会引发NotSupportedException。如果包含DateTime,则在目录名中包含一个冒号。

' / : * ? " < > | 

以上所有内容在文件名中都无效。