Цель: Если вы указали имя файла и каталог, если в каталоге есть файл с тем же именем, добавьте имя файла в «случайную» строку цифр и сохраните его в каталоге. Не предполагайте, что имя файла имеет расширение.Как добавить случайную строку к имени файла перед дополнительным расширением?
Пример:
somepic.jpg --> somepic19232139195.jpg
somepic --> somepic19232139195.jpg
Попытка решения:
string suffix = (DateTime.Now.Ticks/TimeSpan.TicksPerMillisecond).ToString();
int thisIndex = newFilePath.LastIndexOf('.');
newFilePath = newFilePath.Insert(thisIndex != -1 ? thisIndex : newFilePath.Length, suffix);
Проблема: не работает для файлов без расширений, и я не могу понять, почему. somepic
(без расширения) становится somepic
с текущим решением.
Дополнительный вопрос:
ли C# имеют целочисленный тип, я должен использовать вместо int
в приведенном выше коде? Имеет ли он интегральный тип, гарантированный максимальный размер строки, эквивалент size_t
в C++?
Посмотрите на [Путь :: GetFileNameWithoutExtension] (https://msdn.microsoft. com/en-us/library/system.io.path.getfilenamewithoutextension (v = vs.110) .aspx) вместо того, чтобы пытаться его проанализировать. – crashmstr
Знаете, если у вас (как в вашем примере) файл с именем «somepic.jpg» и «somepic», ваш код, вероятно, попытается переименовать эти файлы на одно и то же имя, сбой или перезапись. То есть вы можете обрабатывать множество файлов, пока ваш суффикс не изменится. – Micke
[Ваш код работает нормально] (http://ideone.com/hj4iK0). – Dukeling