/// <summary> /// [LLD-03-05-01:01-01-02] /// </summary> private void file_create_acl(AppDbContext dbc, FileUpdateQueueItem item, Workspace workspace) { // 1. 対象ファイルが存在するかチェック if (!item.Target.Exists) { throw new ApplicationException("対象ファイルが指定位置に存在しません。"); } // 3. ACLファイルから、ACLハッシュを取得する var aclbin = VfsLogicUtils.ReadACLFile(new FileInfo(item.Target.FullName)); var aclhash = aclbin.FindKeyValue("ACLHASH"); // 4. データベースを参照し、ACLハッシュとファイルマッピング情報(AclHash)を突き合わせる FileMappingInfo entity = null; var repo = new FileMappingInfoRepository(dbc); entity = repo.LoadByAclHash(aclhash); if (entity == null) { throw new ApplicationException(); } if (entity.Workspace == null || entity.Workspace.Id != workspace.Id) { throw new ApplicationException(); } // 5. ファイルマッピング情報を参照し、物理ファイルが存在するかチェックする var phyFileInfo = new FileInfo(Path.Combine(workspace.PhysicalSpacePath, entity.MappingFilePath)); if (!phyFileInfo.Exists) { throw new ApplicationException(); } // 6. 物理ファイルを、ACLファイルのパスに対応する物理空間のパスへ移動する // 移動先が、同じ場所となる場合は処理しない。 var aclfileLocalPath_Update = workspace.TrimWorekspacePath(item.Target.FullName, false); var extFilePath = Path.Combine(Path.GetDirectoryName(aclfileLocalPath_Update), Path.GetFileNameWithoutExtension(aclfileLocalPath_Update)); var toFileInfo = new FileInfo(Path.Combine(workspace.PhysicalSpacePath, extFilePath)); if (phyFileInfo.FullName != toFileInfo.FullName) { Directory.CreateDirectory(toFileInfo.Directory.FullName); File.Move(phyFileInfo.FullName, toFileInfo.FullName); // 7. ファイルマッピング情報をDBに書き込む(コンテキスト初期化) entity = repo.LoadByAclHash(aclhash); entity.MappingFilePath = extFilePath; // 新しいファイルマップパス dbc.SaveChanges(); } }
/// <summary> /// [LLD-03-05-01:01-03-01] /// </summary> /// <param name="item"></param> /// <param name="workspace"></param> public void file_rename_acl(FileUpdateQueueItem item, IWorkspace workspace) { // 1. 対象ファイルが存在するかチェック if (!item.Target.Exists) { throw new ApplicationException("対象ファイルが指定位置に存在しません。"); } // 3. ACLファイルから、ACLハッシュを取得する var aclbin = VfsLogicUtils.ReadACLFile(new FileInfo(item.Target.FullName)); var aclhash = aclbin.FindKeyValue("ACLHASH"); // 4. データベースを参照し、ACLハッシュとファイルマッピング情報(AclHash)を突き合わせる IFileMappingInfo entity = mFileMappingInfoRepository.LoadByAclHash(aclhash); if (entity == null) { throw new ApplicationException(); } if (entity.GetWorkspace() == null || entity.GetWorkspace().Id != workspace.Id) { throw new ApplicationException(); } // 5. ファイルマッピング情報を参照し、物理ファイルが存在するかチェックする var phyFileInfo = new FileInfo(Path.Combine(workspace.PhysicalPath, entity.MappingFilePath)); if (!phyFileInfo.Exists) { throw new ApplicationException(); } // 6. 物理空間のファイルを、リネーム後のACLファイル名と同じ名前に変更する var aclfileLocalPath_Update = workspace.TrimWorekspacePath(item.Target.FullName); var extFilePath = Path.Combine(Path.GetDirectoryName(aclfileLocalPath_Update), Path.GetFileNameWithoutExtension(aclfileLocalPath_Update)); var toFileInfo = new FileInfo(Path.Combine(workspace.PhysicalPath, extFilePath)); if (phyFileInfo.FullName != toFileInfo.FullName) { Directory.CreateDirectory(toFileInfo.Directory.FullName); File.Move(phyFileInfo.FullName, toFileInfo.FullName); // 7. ファイルマッピング情報をDBに書き込む(コンテキスト初期化) entity = mFileMappingInfoRepository.LoadByAclHash(aclhash); entity.MappingFilePath = extFilePath; // 新しいファイルマップパス mFileMappingInfoRepository.Save(); } }