C# - Добавьте число в сохраненный файл

сериализируйте объект (к памяти или диску), десериализуйте его, используйте отражение для сравнения этих двух, тогда выполняет все модульные тесты на тот объект снова (кроме сериализации, конечно)

, это предполагает, что модульные тесты могут принять объект как цель вместо того, чтобы делать их собственное

7
задан Rex M 9 October 2009 в 05:03
поделиться

4 ответа

Вот метод, который я часто использую именно в этом случае. Просто передайте строку типа «Снимок экрана», и он найдет имя файла с наименьшим доступным значением в формате «Снимок экрана [номер]» (или просто «Снимок экрана», если его еще нет):

private string GetUniqueName(string name, string folderPath)
{
    string validatedName = name;
    int tries = 1;
    while (File.Exists(folderPath + validatedName))
    {
        validatedName = string.Format("{0} [{1}]", name, tries++);
    }
    return validatedName;
}

(Примечание: это немного упрощенная версия, не учитывающая расширения файлов).

11
ответ дан 6 December 2019 в 12:52
поделиться

Есть ли причина, по которой вы используете числа? Будет ли эта же папка повторно использована позже для другого сеанса? Должны ли номера перезапускаться и заменять существующие файлы, если день другой?

Это такие вещи, о которых следует помнить. Стоит отметить, что OS X раньше предоставляла " легко избежать конфликтов имен и т. д.

Как указано в других предложениях, вам все равно необходимо проверить, существует ли уже файл, и при повторной попытке DateTime.Now будет другим, поэтому имя файла будет другим. Конечно, у вас не должно возникнуть никаких конфликтов, если только скриншоты не находятся в одной и той же миллисекунде или пользователь не ввязывает дату / время (или летнее время тоже может вас испортить).

легко избежать конфликтов имен и т. д.

Как указано в других предложениях, вам все равно необходимо проверить, существует ли уже файл, и при повторной попытке DateTime.Now будет другим, поэтому имя файла будет другим. Конечно, у вас не должно возникнуть никаких конфликтов, если только скриншоты не находятся в одной и той же миллисекунде или пользователь не ввязывает дату / время (или летнее время тоже может вас испортить).

3
ответ дан 6 December 2019 в 12:52
поделиться

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

0
ответ дан 6 December 2019 в 12:52
поделиться

сводка решения

  1. Directory.GetFiles (dest);
  2. Сортировка имен файлов
  3. проанализируйте последнее имя файла, найдите последний использованный номер
  4. запишите следующий файл, добавив к нему следующий номер.

подойдет ли это вам?

0
ответ дан 6 December 2019 в 12:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: