/// <summary> /// 尝试重命名文件或文件夹,如果成功,则返回更新后的路径;如果失败,则返回更新前的路径 /// </summary> public static XCLNetTools.Entity.MethodResult <string> TryRename(bool isFolder, string path, string newName) { var msg = new XCLNetTools.Entity.MethodResult <string>(); msg.IsSuccess = false; msg.Result = path; if (string.IsNullOrWhiteSpace(path)) { return(msg); } try { if (isFolder) { //注意:即使名称没有变化(不区分大小写) ,也会报错 PC.FileSystem.RenameDirectory(path, newName); msg.Result = XCLNetTools.FileHandler.ComFile.ChangePathByFolderName(path, newName, true); } else { //注意:即使名称没有变化(不区分大小写) ,也会报错 PC.FileSystem.RenameFile(path, newName); msg.Result = XCLNetTools.FileHandler.ComFile.ChangePathByFileName(path, newName); } msg.IsSuccess = true; } catch (Exception ex) { msg.Result = path; msg.Message = ex.Message; } return(msg); }
/// <summary> /// 重命名文件或文件夹(先按正常逻辑重命名,如果失败,则使用随机前缀重命名并返回该随机前缀和路径,方便后续移除此前缀,注意:此方法不包含移除随机前缀的逻辑,由前端逻辑处理) /// </summary> /// <param name="isFolder">是否为文件夹</param> /// <param name="path">路径</param> /// <param name="newName">此文件或文件夹的新名称</param> /// <param name="fileId">关联的数据库记录标识</param> public static XCLNetTools.Entity.MethodResult <RenameConflictItem> RenameFileOrFolder(bool isFolder, string path, string newName, int fileId) { var msg = new XCLNetTools.Entity.MethodResult <RenameConflictItem>(); msg.Result = null; msg.IsSuccess = true; if (string.IsNullOrWhiteSpace(path)) { return(msg); } try { //正常重命名 if (isFolder) { //注意:即使名称没有变化(不区分大小写) ,也会报错 PC.FileSystem.RenameDirectory(path, newName); } else { //注意:即使名称没有变化(不区分大小写) ,也会报错 PC.FileSystem.RenameFile(path, newName); } } catch (Exception ex) { //如果正常重命名报错,则采用随机前缀再次重命名,如:[email protected] var tempName = System.IO.Path.GetRandomFileName().Replace("@", "") + splitChar + newName; var tempPath = isFolder ? XCLNetTools.FileHandler.ComFile.ChangePathByFolderName(path, tempName, true) : XCLNetTools.FileHandler.ComFile.ChangePathByFileName(path, tempName); try { msg.Result = new RenameConflictItem(); msg.Result.FileID = fileId; msg.Result.RandomName = tempName; msg.Result.Path = tempPath; msg.Result.RealName = newName; if (isFolder) { PC.FileSystem.RenameDirectory(path, tempName); msg.Result.RealPath = XCLNetTools.FileHandler.ComFile.ChangePathByFolderName(path, newName, true); } else { PC.FileSystem.RenameFile(path, tempName); msg.Result.RealPath = XCLNetTools.FileHandler.ComFile.ChangePathByFileName(path, newName); } } catch { //抛出最开始的异常信息 throw ex; } } return(msg); }