附加文件名,返回错误的字符串

时间:2016-11-29 14:26:17

标签: c#

我目前正在尝试在文件名中添加DateTime戳记,前缀和唯一编号。我想要的输出是:

  

\ ParentDirectory \ Sub Directory \ Another Sub Directory \ Prefix- Unique Number - 11 29 2016 2 07 30 PM.xlsx

上面的

PrefixUnique Number将传递给该函数。我使用以下方法来实现这一目标:

public static string AppendDateTimeToFileName(this string fileName, string prefix, string uniqueNumber)
{
    return string.Concat(
        Path.GetFullPath(fileName),
        Path.Combine(prefix + " - " + uniqueNumber + " - "),
        Path.GetFileNameWithoutExtension(fileName),
        DateTime.Now.ToString()
        .Replace("/", " ")
        .Replace(":", " ")
        .Trim(),
        Path.GetExtension(fileName)
        );
}

我将上述方法称为:

string fileName = @"\\ParentDirectory\Sub Directory\Another Sub Directory\MyFile.xlsx";
string adjustedFileName = fileName.AppendDateTimeToFileName("Shipping Note", "0254900");

我收到的输出如下:

  

\ ParentDirectory \ Sub Directory \ Another Sub Directory \ Shipping Note - \ 0254900 - 11 29 2016 2 08 10 PM

正如您在上面的输出中看到的那样,字符串不正确,首先我得到一个额外的-\,文件扩展名也没有通过。有人可以告诉我,我在哪里出错。

2 个答案:

答案 0 :(得分:2)

以下是我的表现

public static string AppendDateTimeToFileName(this string fileName, string prefix, string uniqueNumber)
{
    return Path.Combine(
        Path.GetDirectoryName(fileName),
        string.Concat(
            prefix,
            " - ",
            uniqueNumber,
            " - ",
            Path.GetFileNameWithoutExtension(fileName),
            DateTime.Now.ToString("MM dd yyyy h mm ss tt"),
            Path.GetExtension(fileName)));
}

这正确地使用Path.Combine来组合Path.GetDirectoryName的目录和您的新连接文件名。注意我还使用了日期格式字符串而不是替换。您可能需要考虑更改该格式并在文件名和日期之间放置一个分隔符。

答案 1 :(得分:1)

代码的发布版本提供以下输出:

  

\ ParentDirectory \ Sub Directory \ Another Sub Directory \ MyFile.xlsxShipping Note - 0254900 - MyFile29 11 2016 15 46 48.xlsx

而不是你发布的:

  

\ ParentDirectory \ Sub Directory \ Another Sub Directory \ Shipping Note - \ 0254900 - 11 29 2016 2 08 10 PM

如果你想要的输出是:

  

\ ParentDirectory \ Sub Directory \ Another Sub Directory \ Prefix- Unique Number - 11 29 2016 2 07 30 PM.xlsx

您需要将目录移至Path.Combine并使用GetDirectoryName。同时删除该行:

Path.GetFileNameWithoutExtension(fileName)

因为在您想要的输出中,我没有看到旧文件名"MyFile" 这段代码:

public static string AppendDateTimeToFileName(this string fileName, string prefix, string uniqueNumber)
{
    return string.Concat(               
        Path.Combine(Path.GetDirectoryName(fileName), prefix + " - " + uniqueNumber + " - "),
        DateTime.Now.ToString()
        .Replace(".", " ")
        .Replace(":", " ")
        .Trim(),
        Path.GetExtension(fileName)
        );
}

将产生以下输出:

  

\ ParentDirectory \ Sub Directory \ Another Sub Directory \ Shipping Note - 0254900 - 29 11 2016 15 39 37.xlsx