/// <summary> /// From a given name, increment it /// myFileAsset -> myFileAsset 1 /// myFileAsset 58 -> myFileAsset 59 /// </summary> /// <param name="nameToIncrement">name to increment</param> /// <param name="index">new index incremented</param> /// <returns>new incremented name</returns> public static string IncrementName(string nameToIncrement, out int index) { index = ExtString.ExtractIntFromEndOfString(nameToIncrement); string nameWithoutNumber = nameToIncrement.Replace(index.ToString(), ""); nameWithoutNumber = nameWithoutNumber.TrimEnd(' '); index += 1; return(nameWithoutNumber + " " + index); }
/// <summary> /// from a given string, like: RaceTrack 102 /// extract the number 102 (int) /// </summary> /// <param name="input"></param> /// <returns>number in the end of string</returns> public static int ExtractIntFromEndOfString(string input) { var stack = new Stack <char>(); for (var i = input.Length - 1; i >= 0; i--) { if (!char.IsNumber(input[i])) { break; } stack.Push(input[i]); } string result = new string(stack.ToArray()); return(ExtString.ToInt(result)); }
/// <summary> /// take a path of a file, increment his number in his name, test if it exist, and return the new path /// /// use: string newFilePath = ExtString.RenameIncrementalFile(AssetDatabase.GetAssetPath(assetObject)); /// if you want to have only the name after, do: /// string only name = Path.GetFileName(newFilePath); /// /// return the renamed file asset like: /// Asset/Folder/myFileAsset.asset -> Asset/Folder/myFileAsset 1.asset /// Asset/Folder/myFileAsset 0.asset -> Asset/Folder/myFileAsset 1.asset /// Asset/Folder/myFileAsset 58.asset -> Asset/Folder/myFileAsset 59.asset /// Asset/Folder/myFileAsset58.asset -> Asset/Folder/myFileAsset 59.asset /// asset 24.asset /// </summary> /// <param name="pathFileToRename">path of the file</param> /// <param name="index">new index calculated</param> /// <returns></returns> public static string RenameIncrementalFile(string pathFileToRename, out int index, bool setZeroIfNothingFound) { string nameAsset = Path.GetFileNameWithoutExtension(pathFileToRename); int numberPrevious = ExtString.ExtractIntFromEndOfString(nameAsset); string nameWithoutNumber = nameAsset.Replace(numberPrevious.ToString(), ""); nameWithoutNumber = nameWithoutNumber.TrimEnd(' '); string dirName = Path.GetDirectoryName(pathFileToRename).Replace('\\', '/') + '/'; string newName = ""; string finalRenamedPath = ""; index = numberPrevious; do { if (index == 0) { if (setZeroIfNothingFound) { newName = nameWithoutNumber + " " + (index); } else { newName = nameWithoutNumber; } } else { newName = nameWithoutNumber + " " + (index); } finalRenamedPath = dirName + newName + Path.GetExtension(pathFileToRename); index++; }while (File.Exists(finalRenamedPath) || Directory.Exists(finalRenamedPath)); return(finalRenamedPath); }