猿问

如何使 WPF 应用程序不覆盖它创建的文件

下面的程序通过按 P 键创建自身的快照。它在程序所在的目录中创建文件。例如,第一次按 P 键时,它会创建文件 snapshot.png,如果再次按它,则会创建 snapshot_1,第三次会创建 snapshot_2,依此类推...


但是如果你关闭程序并再次启动它并且那些文件现在存在于目录中,如果现在你按 P 键它会覆盖它们......


我想要的是程序检查它要创建的文件是否存在,如果存在,则尝试创建一个具有行中下一个数字的文件..如果也存在,则尝试下一个,依此类推on,直到找到一个不存在的文件名,然后才创建文件。


你能帮我修改代码来做我正在描述的吗?


     string filename = "\\screenshot.png";

    private void Mainwindow_KeyDown(object sender, KeyEventArgs e)

    {                     

        if (e.Key == Key.P)

        {


            FrameworkElement element = UxVisual as FrameworkElement;


            var pathstr = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);


            filename = "\\screenshot_" + DateTime.Now.ToFileTime() + ".png";

            Uri path = new Uri(pathstr + filename);



            CaptureScreen(element, path);

        }


婷婷同学_
浏览 157回答 1
1回答

Helenr

我不知道为什么这个问题在上面的评论部分变得如此冒犯......但是正如其他用户已经建议的那样,你应该考虑在你的文件路径中添加一个时间戳。您可以使用这样DateTime的字符串操作来执行此操作:filename = "\\screenshot_" + DateTime.Now.ToFileTime() + ".png";可能的输出将是一个名为此文件的文件screenshot132006693766467910.png,这将导致所有文件名彼此不同并且不会相互覆盖根据要求,您可以使用以下方法使它看起来更好:var filename = "\\screenshot_" + DateTime.Now.ToString("HH_mm_ss_fff") + ".png";输出就像screenshot_16_14_11_523.png包含时分秒和毫秒
随时随地看视频慕课网APP
我要回答