tool__ Ответов: 1

Как сделать приложение WPF не перезаписывать файлы, которые оно создает.


Приведенная ниже программа создает моментальный снимок самой себя, нажав клавишу 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);

            if (System.IO.File.Exists(pathstr + filename))
            {
                try
                {
                    string i = 
                    filename.Substring(filename.LastIndexOf('_') + 1, 
                    filename.LastIndexOf('.') - (filename.LastIndexOf('_') 
                    + 1));

                    filename = "\\screenshot_" + (Convert.ToInt32(i) +  
                    1).ToString() + ".png";
                }
                catch
                {
                    filename = "\\screenshot_1.png";
                }
            }
            Uri path = new Uri(pathstr + filename);


            CaptureScreen(element, path);
        }

1 Ответов

Рейтинг:
2

Richard MacCutchan

Воспользуйся Каталог.Метод GetFiles (System.IO) | Microsoft Docs[^] чтобы получить все файлы в шаблоне "snapshot*", и найти последний из них в отсортированном результате. Затем вы можете определить, какое число использовать для первого.


tool__

Я не могу понять, как использовать этот метод с существующим кодом, можете ли вы изменить приведенный выше код для меня?

Richard MacCutchan

К сожалению, нет. В начале работы приложения вам нужно получить список существующих файлов и найти тот, который имеет наибольшее количество суффиксов. Затем вы можете начать экономить с этого момента. В качестве альтернативы вы можете сохранить и восстановить значение в настройках конфигурации пользователя. Видеть Как написать пользовательские настройки во время выполнения с помощью C# | Microsoft Docs[^] относительно деталей.