Похоже, что вы пытаетесь упорядочить файлы в каталоге, создавая папки для них на основе имени файла, и не можете найти последний экземпляр символа -
для создания имени папки.
Один простой способ сделать это - использовать метод LastIndexOf
, который будет возвращать индекс последнего экземпляра строки "-"
или -1
, если он не найден.
Я думаю, что есть и некоторые другие оптимизации, которые вы могли бы использовать здесь, где вы можете просто взять имя основной папки и затем просмотреть все файлы одновременно (это может быть не совсем то, что вы хотите, но это то, что я использовалв прошлом).Таким образом, вам нужно только указать путь mainFolder
, а затем метод может сделать все остальное.Кроме того, вы можете безопасно вызывать CreateDirectory
, даже если каталог уже существует (в этом случае он ничего не сделает).
Вот пример:
/// <summary>
/// Moves all files in mainFolder to a subfolder based on the file's name
/// </summary>
/// <param name="mainFolder">The root folder to scan for files</param>
/// <returns>true if the operation was successful</returns>
public static bool OrganizeFiles(string mainFolder)
{
if (!Directory.Exists(mainFolder))
throw new DirectoryNotFoundException(nameof(mainFolder));
try
{
foreach (var file in Directory.EnumerateFiles(mainFolder))
{
var subFolderName = Path.GetFileNameWithoutExtension(file);
var lastHyphen = subFolderName.LastIndexOf("-");
if (lastHyphen > -1)
{
subFolderName = subFolderName.Substring(0, lastHyphen);
}
Directory.CreateDirectory(Path.Combine(mainFolder, subFolderName));
File.Move(file, subFolderName);
}
return true;
}
catch (Exception e)
{
return false;
}
}