Esempio n. 1
0
        private async Task OnGetImportFileOrDirectoryAsync(GetImportFileOrDirectory rpc)
        {
            long t1       = Bright.Time.TimeUtil.NowMillis;
            var  file     = rpc.Arg.FileOrDirName;
            var  suffixes = rpc.Arg.InclusiveSuffixs;
            var  re       = new GetImportFileOrDirectoryRes()
            {
                SubFiles = new List <Luban.Common.Protos.FileInfo>(),
            };

            try
            {
                if (Directory.Exists(file))
                {
                    re.Err    = 0;
                    re.IsFile = false;
                    foreach (var subFile in Directory.GetFiles(file, "*", SearchOption.AllDirectories))
                    {
                        if (FileUtil.IsValidInputFile(subFile) && (suffixes.Count == 0 || suffixes.Any(s => subFile.EndsWith(s))))
                        {
                            var md5 = await CacheMetaManager.Ins.GetOrUpdateFileMd5Async(subFile);

                            re.SubFiles.Add(new Luban.Common.Protos.FileInfo()
                            {
                                FilePath = FileUtil.Standardize(subFile), MD5 = md5
                            });
                        }
                    }
                }
                else if (File.Exists(file))
                {
                    re.IsFile = true;
                    re.Md5    = await CacheMetaManager.Ins.GetOrUpdateFileMd5Async(file);
                }
                else
                {
                    re.Err = Luban.Common.EErrorCode.FILE_OR_DIR_NOT_EXISTS;
                }
            }
            catch (Exception e)
            {
                re.Err = Luban.Common.EErrorCode.READ_FILE_FAIL;
                s_logger.Error(e);
            }

            s_logger.Trace(" GetImportFileOrDirectory file:{file} err:{err} cost:{time}", file, re.Err, Bright.Time.TimeUtil.NowMillis - t1);

            Session.ReplyRpc <GetImportFileOrDirectory, GetImportFileOrDirectoryArg, GetImportFileOrDirectoryRes>(rpc, re);
        }
Esempio n. 2
0
        public async Task <GetImportFileOrDirectoryRes> GetFileOrDirectoryAsync(string file, params string[] searchPatterns)
        {
            long t1 = TimeUtil.NowMillis;
            var  re = new GetImportFileOrDirectoryRes()
            {
                SubFiles = new List <Luban.Common.Protos.FileInfo>(),
            };
            var suffixes = new List <string>(searchPatterns.Select(s => s.Trim()).Where(s => !string.IsNullOrWhiteSpace(s)));

            try
            {
                if (Directory.Exists(file))
                {
                    re.Err    = 0;
                    re.IsFile = false;
                    foreach (var subFile in Directory.GetFiles(file, "*", SearchOption.AllDirectories))
                    {
                        if (FileUtil.IsValidInputFile(subFile) && (suffixes.Count == 0 || suffixes.Any(s => subFile.EndsWith(s))))
                        {
                            var md5 = FileUtil.CalcMD5(await FileUtil.ReadAllBytesAsync(subFile));
                            re.SubFiles.Add(new Luban.Common.Protos.FileInfo()
                            {
                                FilePath = FileUtil.Standardize(subFile), MD5 = md5
                            });
                        }
                    }
                }
                else if (File.Exists(file))
                {
                    re.IsFile = true;
                    re.Md5    = FileUtil.CalcMD5(await FileUtil.ReadAllBytesAsync(file));
                }
                else
                {
                    re.Err = Luban.Common.EErrorCode.FILE_OR_DIR_NOT_EXISTS;
                }
            }
            catch (Exception e)
            {
                re.Err = Luban.Common.EErrorCode.READ_FILE_FAIL;
                s_logger.Error(e);
            }

            s_logger.Trace(" GetImportFileOrDirectory file:{file} err:{err} cost:{time}", file, re.Err, TimeUtil.NowMillis - t1);

            return(re);
        }