///------------------------------------------------------------------------------------------------- /// <summary> 计算一个软件版本文件. </summary> /// /// <remarks> /// "version" : [1,0,0,0], /// "rootPath" : "C:\\Program Files\\MRSystem", /// "rootUrl" : "http://mr.xuexuesoft.com:8010/soft/MRSystem/v1.0.0.0/", /// "files" : [ /// { /// "relativePath" : "CamHelper.dll", /// "fileSize" : 88064, /// "SHA256" : "9D8B396F753A9679ACDBC731535742C1B946A480330DD13B131B16C4E56DB3A7" /// }, /// { /// "relativePath" : "Cjwdev.WindowsApi.dll", /// "fileSize" : 56320, /// "SHA256" : "212DAAF6E93D762F55DC900DF87BBB32FF191E6BEF1F57E185E04EEB2A671CC8" /// }, /// /// Dx, 2019/6/27. </remarks> /// /// <param name="rootPath"> 写进json的软件安装目录. </param> /// <param name="version"> . </param> /// <param name="rootUrl"> . </param> /// <param name="dirPath"> 要计算的文件夹. </param> /// <param name="saveJsonPath"> 要保存的json文件位置. </param> ///------------------------------------------------------------------------------------------------- public static void CreateSoftVersionFile(string rootPath, uint[] version, string rootUrl, string dirPath, string saveJsonPath) { if (version == null || version.Length != 4) { Log.Error($"IncrementalUpdate.CreateConfigFile():版本号规定为4个长度的uint数组!"); return; } DirectoryInfo di = new DirectoryInfo(dirPath); if (!di.Exists) { Log.Error($"IncrementalUpdate.CreateConfigFile():文件夹不存在{di.FullName}!"); return; } SoftFile softFile = new SoftFile { version = version, rootPath = rootPath, rootUrl = rootUrl }; FileInfo[] fis = di.GetFiles("*", SearchOption.AllDirectories);//无筛选的得到所有文件 for (int i = 0; i < fis.Length; i++) { Fileitem item = new Fileitem(); //生成相对路径:这个文件的完整目录中替换根目录的部分即可,最后切分文件夹都使用斜杠/ (unity的API中基本是/) //相对路径结果前面不带斜杠 if (di.FullName.EndsWith("\\") || di.FullName.EndsWith("/")) { item.relativePath = fis[i].FullName.Substring(di.FullName.Length).Replace("\\", "/"); } else { //为了相对路径结果前面不带斜杠,所以+1 item.relativePath = fis[i].FullName.Substring(di.FullName.Length + 1).Replace("\\", "/"); } item.fileSize = fis[i].Length; item.SHA256 = fis[i].SHA256(); //计算然后添加到结果 softFile.files.Add(item); } StreamWriter sw = File.CreateText(saveJsonPath); JsonWriter jw = new JsonWriter(sw) { PrettyPrint = true }; JsonMapper.ToJson(softFile, jw); sw.Flush(); sw.Close(); }
public async Task <FileExplorerResponse> GetDetailsAsync(string path, string[] names, IEnumerable <object> selectedItems = null) { FileExplorerResponse DetailsResponse = new FileExplorerResponse(); try { bool isFile = false; FileDetails[] fDetails = new FileDetails[names.Length]; FileDetails fileDetails = new FileDetails(); if (selectedItems != null) { foreach (var Fileitem in selectedItems) { Newtonsoft.Json.Linq.JToken myObject = Newtonsoft.Json.JsonConvert.DeserializeObject <Newtonsoft.Json.Linq.JToken>(Fileitem.ToString()); AzureFileDirectoryContent s_item = myObject.ToObject <AzureFileDirectoryContent>(); isFile = s_item.isFile; break; } } if (isFile) { CloudBlockBlob blockBlob = container.GetBlockBlobReference(path + names[0]); await blockBlob.FetchAttributesAsync(); fileDetails.Name = blockBlob.Name; fileDetails.Type = blockBlob.Name.Split('.')[1]; fileDetails.Location = blockBlob.Uri.ToString(); fileDetails.Size = blockBlob.Properties.Length; fileDetails.Modified = blockBlob.Properties.LastModified.Value.LocalDateTime.ToString(); } else { CloudBlobDirectory sampleDirectory = container.GetDirectoryReference(path); fileDetails.Name = names[0]; fileDetails.Location = sampleDirectory.Uri.ToString() + "/" + names[0]; fileDetails.Type = "File Folder"; fileDetails.Modified = sampleDirectory.Container.Properties.LastModified.ToString(); } fDetails[0] = fileDetails; DetailsResponse.details = fDetails; return(await Task.Run(() => { return DetailsResponse; })); } catch (Exception ex) { throw ex; } }
public async Task RemoveAsync(string[] names, string path, IEnumerable <object> selectedItems = null) { CloudBlobDirectory sampleDirectory = container.GetDirectoryReference(path); foreach (var Fileitem in selectedItems) { Newtonsoft.Json.Linq.JToken myObject = Newtonsoft.Json.JsonConvert.DeserializeObject <Newtonsoft.Json.Linq.JToken>(Fileitem.ToString()); AzureFileDirectoryContent s_item = myObject.ToObject <AzureFileDirectoryContent>(); if (s_item.isFile) { CloudBlockBlob blockBlob = container.GetBlockBlobReference(path + s_item.name); await blockBlob.DeleteAsync(); } else { CloudBlobDirectory subDirectory = container.GetDirectoryReference(path + s_item.name); var items = await AsyncReadCall(path + s_item.name, "Remove"); foreach (var item in items.Results) { CloudBlockBlob blockBlob = container.GetBlockBlobReference(path + s_item.name + "/" + item.Uri.ToString().Replace(subDirectory.Uri.ToString(), "")); await blockBlob.DeleteAsync(); } } } }
public async Task RenameAsync(string path, string oldName, string newName, IEnumerable <CommonFileDetails> commonFiles, IEnumerable <object> selectedItems = null) { bool isFile = false; foreach (var Fileitem in selectedItems) { Newtonsoft.Json.Linq.JToken myObject = Newtonsoft.Json.JsonConvert.DeserializeObject <Newtonsoft.Json.Linq.JToken>(Fileitem.ToString()); AzureFileDirectoryContent s_item = myObject.ToObject <AzureFileDirectoryContent>(); isFile = s_item.isFile; break; } if (isFile) { CloudBlob existBlob = container.GetBlobReference(path + oldName); CloudBlob newBlob = container.GetBlobReference(path + newName); await newBlob.StartCopyAsync(existBlob.Uri); await existBlob.DeleteIfExistsAsync(); } else { CloudBlobDirectory sampleDirectory = container.GetDirectoryReference(path + oldName); var items = await AsyncReadCall(path + oldName, "Rename"); foreach (var item in items.Results) { string name = item.Uri.AbsolutePath.Replace(sampleDirectory.Uri.AbsolutePath, ""); CloudBlob newBlob = container.GetBlobReference(path + newName + "/" + name); await newBlob.StartCopyAsync(item.Uri); await container.GetBlobReference(path + oldName + "/" + name).DeleteAsync(); } } }
public async Task PasteAsync(string sourceDir, string targetDir, string[] names, string option, IEnumerable <CommonFileDetails> commonFiles, IEnumerable <object> selectedItems = null, IEnumerable <object> targetFolder = null) { foreach (var Fileitem in selectedItems) { Newtonsoft.Json.Linq.JToken myObject = Newtonsoft.Json.JsonConvert.DeserializeObject <Newtonsoft.Json.Linq.JToken>(Fileitem.ToString()); AzureFileDirectoryContent s_item = myObject.ToObject <AzureFileDirectoryContent>(); if (s_item.isFile) { string sourceDir1 = sourceDir + s_item.name; CloudBlob existBlob = container.GetBlobReference(sourceDir1); CloudBlob newBlob = container.GetBlobReference(targetDir + s_item.name); await newBlob.StartCopyAsync(existBlob.Uri); if (option == "move") { await existBlob.DeleteIfExistsAsync(); } } else { CloudBlobDirectory sampleDirectory = container.GetDirectoryReference(sourceDir + s_item.name); string Oper = "Paste"; var items = await AsyncReadCall(sourceDir + s_item.name, Oper); foreach (var item in items.Results) { string name = item.Uri.ToString().Replace(sampleDirectory.Uri.ToString(), ""); CloudBlob newBlob = container.GetBlobReference(targetDir + s_item.name + "/" + name); await newBlob.StartCopyAsync(item.Uri); if (option == "move") { await container.GetBlobReference(sourceDir + s_item.name + "/" + name).DeleteAsync(); } } } } }