Похоже, что вам нужен алгоритм для копирования файлов с соответственно увеличенными именами файлов. Это сделает то, что вы ищете.
Скажите, это имена каталогов файлов и архивов.
var file = @"Data/A.txt";
var archive = @"Data/Archive";
Мы увидим, удовлетворено ли условие времени последней записи. Если это так, мы перечисляем все файлы в вашем каталоге назначения, которые соответствуют вашему исходному шаблону файлов. То есть он должен начинаться с A
, затем он может иметь или не иметь (1)
и т. Д. Поэтому перечислены все файлы, такие как A.txt
, A(1).txt
, A(2).txt
. Затем мы приводим в порядок последний из этих файлов (и здесь мы должны быть осторожны при сортировке по длине, если вы просто сортируете по значению, A.txt
придет после всех остальных). Затем, используя Regex
, мы получаем номер последнего файла, его приращение и копируем файл с новым именем.
if (File.GetLastWriteTime(file) > DateTime.Today)
{
var fileNameOnly = Path.GetFileNameWithoutExtension(file);
var ext = Path.GetExtension(file);
var pattern = fileNameOnly + "*" + ext;
var lastCopy = Directory.EnumerateFiles(archive, pattern, System.IO.SearchOption.TopDirectoryOnly)
.OrderBy(x => x.Length)
.LastOrDefault();
var newName = fileNameOnly + ext;
if (lastCopy != null)
{
var lastCopyNameOnly = Path.GetFileNameWithoutExtension(lastCopy);
var match = Regex.Match(lastCopyNameOnly, @"(.+)\((\d+)\)");
int lastNum = 1;
if (match.Success)
{
int.TryParse(match.Groups[2].Value, out lastNum);
lastNum++;
}
newName = string.Format("{0}({1}){2}", fileNameOnly, lastNum, ext);
}
var dest = Path.Combine(archive, newName);
File.Copy(file, dest);
}
Примечание
Будьте осторожны с var lastNum = 1;
initializatin какЧто ж. Вы должны инициализировать 1
, а не zero
. Потому что если match.Success == false
, это означает, что у вас есть только A.txt
файл в месте назначения, то ваш следующий файл будет A(1).txt
. Если вы инициализировали его как zero
, тогда ваш следующий файл будет A(0).txt
, что не соответствует желаемому результату.