Как заставить приложение WPF не перезаписывать файлы, которые оно создает - PullRequest
0 голосов
/ 25 апреля 2019

Программа ниже создает снимок самого себя, нажимая клавишу P. Он создает файл в каталоге, в котором находится программа. Например, при первом нажатии клавиши P создается файл snapshot.png, при повторном нажатии он создает snapshot_1, третий раз snapshot_2 и т. Д. ...

Но если вы закроете программу и запустите ее снова, и эти файлы уже существуют в каталоге, если теперь вы нажмете клавишу P, они перезапишут их ...

Я хочу, чтобы программа проверяла, существует ли созданный файл и, если да, пытается создать файл со следующим номером в строке ... и, если он существует, попробуйте следующий. и т. д., пока не найдет имя файла, которого не существует, и только затем создаст его.

Можете ли вы помочь мне изменить код, чтобы сделать то, что я описываю?

     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);
        }

1 Ответ

0 голосов
/ 25 апреля 2019

Я не знаю, почему этот вопрос оказался настолько оскорбительным в комментариях выше ... Однако, как уже предложили другие пользователи, вы должны добавить временную метку в путь к файлу. Вы можете сделать это, используя 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, содержащий часы, минуты, секунды и миллисекунды

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...