0

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

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 函数吗?

也许我可以在这里帮忙?

4

5 回答 5

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.

但请查看有关CreateDirectoryMSDN 页面的详细信息。还要寻找Exceptions并包裹在try-catch块中。

于 2013-01-29T08:37:06.280 回答
2
string timestamp =DateTime.Now.ToString("MMddyyyy.HHmmss");
SavePic(mySuperDefaultPainting, @"C:\KinDraw\out"+timestamp+".png");

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

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

希望能帮助到你 :)

于 2013-01-29T08:38:06.433 回答
1

尝试在代码的开头添加:

var extension = Path.GetExtension(filename);
var newName = filename.Replace(filename, extension) + DateTime.Now.ToString("yyyy-MM-dd HH:mm:dd") + extension;
于 2013-01-29T08:37:36.727 回答
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因为前者不受夏令时的影响。

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

于 2013-01-29T08:38:36.690 回答
-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);

        }
于 2021-07-21T16:31:03.913 回答