C#将时间戳附加到Filepath

时间:2013-01-29 08:32:41

标签: c# file-io timestamp

我有以下问题或疑问, 我有这个功能

private void SavePic(Canvas canvas, string filename)
    {
        RenderTargetBitmap renderBitmap = new RenderTargetBitmap(
         (int)canvas.Width, (int)canvas.Height,
         96d, 96d, PixelFormats.Pbgra32);
        // needed otherwise the image output is black
        canvas.Measure(new Size((int)canvas.Width, (int)canvas.Height));
        canvas.Arrange(new Rect(new Size((int)canvas.Width, (int)canvas.Height)));

        renderBitmap.Render(canvas);

        //JpegBitmapEncoder encoder = new JpegBitmapEncoder();
        PngBitmapEncoder encoder = new PngBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(renderBitmap));

        using (FileStream file = File.Create(filename))
        {

            encoder.Save(file);
        }
    }

和相应的电话 SavePic(mySuperDefaultPainting, @"C:\KinDraw\out.png");

现在我想将文件名附加日期+时间? 你可以在函数调用中获取这个DateTime函数吗?

也许我可以帮到这里?

6 个答案:

答案 0 :(得分:3)

尝试(针对文件路径更新)

string fileName=string.Format("{0}-{1:ddMMMyyyy-HHmm}.png", @"C:\KinDraw\out", 
                                                    DateTime.Now);
if(!Directory.Exists(Path.GetDirectoryName(fileName)))
{
    Directory.CreateDirectory(Path.GetDirectoryName(fileName));
}

SavePic(mySuperDefaultPainting, fileName);

说时间 29-JAN-2013 07:30 PM 它会给你:C:\KinDraw\out-29JAN2013-1930.png

但请查看this MSDN page上有关CreateDirectory的详细信息。还要查找Exceptions并包装try-catch块。

答案 1 :(得分:1)

尝试在代码的开头添加:

var extension = Path.GetExtension(filename);
var newName = filename.Replace(filename, extension) + DateTime.Now.ToString("yyyy-MM-dd HH:mm:dd") + extension;

答案 2 :(得分:1)

string timestamp =DateTime.Now.ToString("MMddyyyy.HHmmss");
SavePic(mySuperDefaultPainting, @"C:\KinDraw\out"+timestamp+".png");

更新:(如果目录不存在,则创建目录)

if (!Directory.Exists(filepath))
    Directory.CreateDirectory(filepath);

希望有所帮助:)

答案 3 :(得分:1)

只需将此行放在那里:

string stampedFileName = filename.Replace(".",
    string.Format("{0:YYYY-mm-dd hhmmss}", DateTime.UtcNow) + ".");

然后更改

using (FileStream file = File.Create(filename))

using (FileStream file = File.Create(stampedFilename))

使用DateTime.UtcNow而非DateTime.Now非常重要,因为前者不受夏令时的影响。

编辑:我上面提出的格式有一个优点,即按字母顺序对文件名进行排序,然后自动按时间顺序排序。

答案 4 :(得分:0)

用法:

string result = "myfile.txt".AppendTimeStamp();
//myfile20130604234625642.txt

扩展方法

public static class MyExtensions
{
    public static string AppendTimeStamp(this string fileName)
    {
        return string.Concat(
            Path.GetFileNameWithoutExtension(fileName),
            DateTime.Now.ToString("yyyyMMddHHmmssfff"),
            Path.GetExtension(fileName)
            );
    }
}

答案 5 :(得分:-1)

我就是这样做的,而且效果很好。稍微调整了@Avishek 代码以使其适用于我的代码。无需删除文件或丢失其中的内容。

输出文件后调用“Rename()”方法..

public static void Rename()
        {
            string timestamp = DateTime.Now.ToString("MMddyyyy.HHmmss"); 
            string originalFile = @"C:\Users\Data_Output\" + fileName + ".csv"; 
            string newFile = @"C:\Users\Data_Output\" + fileName + "_" + timestamp + ".csv";

            File.Move(originalFile, newFile);

        }