将格式化的字符串保存为c#中的文件名问题

时间:2011-02-18 13:49:41

标签: c#

嗨,伙计们, 我最近才开始使用c#所以我对它的语法还不是很熟悉,而且我遇到了一个问题。我想将当前时间写入文件名。我正在使用以下代码:

DateTime now = DateTime.now;
string dateString = string.Format(@"Z:\test\{0}.bmp",now.ToString("s"));
bitmap.Save(dateString);

现在这让我无法访问文件路径错误。显然它与时间部分的“:”字符有关(至少当我给出now.ToString(“d”)时它保存得很好)。 有什么想法导致这个?谢谢。

7 个答案:

答案 0 :(得分:7)

“s”格式将创建类似以下内容的文件名:

2009-06-15T13:45:30.bmp

由于冒号,这不是有效的文件名。在调用ToString后用冒号替换冒号,或者使用不同的格式。

请注意,“d”也不会一直有效,因为可以在名称中包含“/”,具体取决于文化。

就个人而言,我建议像“yyyyMMdd-HHmmss”这样的东西会给你类似的东西

20090615-134530.bmp

答案 1 :(得分:2)

无论代码如何,Windows文件系统都不允许在文件名中使用冒号(或其他几个“特殊”字符)。所以问题发生在操作系统级别,而不是代码中。

您需要以不同方式删除这些字符和/或format the timestamp,以将其用作文件名。

答案 2 :(得分:1)

某些字符在Windows上的文件名中无效 - 请参阅this link。这与c#无关。

答案 3 :(得分:1)

这是由Windows文件系统引起的,该系统不允许文件名中包含:

答案 4 :(得分:1)

':'是用于命名文件的无效字符。在尝试保存文件之前,您需要确定一些其他有效字符来替换“:”。

答案 5 :(得分:1)

public static class SPStringUtils
{
    public static string MakeFilename(this DateTime dt)
    {
        return dt.ToString("yyyyMMdd-HHmmss");
    }

    public static string MakeFilename(this DateTime dt, string format)
    {
        return string.Format(format, MakeFilename(Now));
    }
}

...
Console.WriteLine(Now.MakeFilename(@"c:\logs\log{0}.log");

答案 6 :(得分:0)

文件名中不能有':',这就是原因。