///-------------------------------------------------------------------------------------------------
        /// <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();
        }
Beispiel #2
0
        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; }
        }
Beispiel #3
0
        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();
                    }
                }
            }
        }
Beispiel #4
0
        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();
                }
            }
        }
Beispiel #5
0
        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();
                        }
                    }
                }
            }
        }