public DoctorRepository(ApplicationDbContext context, ITableTrackNotification tableTrackNotification, IUserProfileRepository userProfileRepository, UserManager <ApplicationUser> userManager, IFileConfig fileConfig) : base(context) { _userManager = userManager; _fileConfig = fileConfig; _tableTrackNotification = tableTrackNotification; _userProfileRepository = userProfileRepository; }
/// <summary> /// 添加文件方法 /// </summary> /// <param name="config">创建文件配置类</param> public void Create(IFileConfig config) { lock (_lockObject) { //得到创建文件配置类对象 var createFileConfig = config as CreateFileConfig; //检查创建文件配置类是否为空 if (this.CheckConfigIsError(config)) { return; } //创建完文件后写入一段话 char[] insertContent = "HelloWorld".ToCharArray(); //转化为byte[] byte[] byteArrayContent = Encoding.Default.GetBytes(insertContent, 0, insertContent.Length);; //根据传入的配置文件中来决定是否同步或一部实例化stream对象 FileStream stream = createFileConfig.IsAsync ? new FileStream(createFileConfig.CreateUrl, FileMode.Create, FileAccess.ReadWrite, FileShare.None, 4096, true) : new FileStream(createFileConfig.CreateUrl, FileMode.Create); using (stream) { //如果该流是同步流且可写 if (!stream.IsAsync && stream.CanWrite) { stream.WriteTimeout = READ_OR_WRITE_TIMEOUT; stream.Write(byteArrayContent, 0, byteArrayContent.Length); } else if (stream.CanWrite) //异步流且可写 { stream.BeginWrite(byteArrayContent, 0, byteArrayContent.Length, this.End_CreateFileCallBack, stream); stream.Close(); } } } }
// 然後在FileStreamTest 類中新增一個Copy方法實現文件的複制功能 /// <summary> ///複製方法 /// </summary> /// <param name="config">拷貝文件複製</param> public void Copy(IFileConfig config) { lock (_lockObject) { //得到CopyFileConfig對象 var copyFileConfig = config as CopyFileConfig; //檢查CopyFileConfig類對像是否為空或者OrginalFileUrl是否為空 if (CheckConfigIsError(copyFileConfig) || !File.Exists(copyFileConfig.OrginalFileUrl)) { return; } //創建同步或異步流 FileStream stream = copyFileConfig.IsAsync ? new FileStream(copyFileConfig.OrginalFileUrl, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true) : new FileStream(copyFileConfig.OrginalFileUrl, FileMode.Open); //定義一個byte數組接受從原文件讀出的byte數據 byte[] orignalFileBytes = new byte[stream.Length]; using (stream) { // stream.ReadTimeout = READ_OR_WRITE_TIMEOUT; //如果異步流 if (stream.IsAsync) { //將該流和讀出的byte[]數據放入配置類,在callBack中可以使用 copyFileConfig.OriginalFileStream = stream; copyFileConfig.OriginalFileBytes = orignalFileBytes; if (stream.CanRead) //異步開始讀取,讀完後進入End_ReadFileCallBack方法,該方法接受copyFileConfig參數 { stream.BeginRead(orignalFileBytes, 0, orignalFileBytes.Length, End_ReadFileCallBack, copyFileConfig); } } else //否則同步讀取 { if (stream.CanRead) { //一般讀取原文件 stream.Read(orignalFileBytes, 0, orignalFileBytes.Length); } //定義一個寫流,在新位置中創建一個文件 FileStream copyStream = new FileStream(copyFileConfig.DestinationFileUrl, FileMode.CreateNew); using (copyStream) { // copyStream.WriteTimeout = READ_OR_WRITE_TIMEOUT; //將源文件的內容寫進新文件 copyStream.Write(orignalFileBytes, 0, orignalFileBytes.Length); copyStream.Close(); } } stream.Close(); Console.ReadLine(); } } }
/// <summary> /// 文件复制 /// </summary> /// <param name="config">拷贝文件复制</param> public void Copy(IFileConfig config) { lock (_lockObject) { //得到CopyFileConfig对象 var copyFileConfig = config as CopyFileConfig; //检查CopyFileConfig类对象是否为空 或OrginalFileUrl是否为空 if (CheckConfigIsError(copyFileConfig) || !File.Exists(copyFileConfig.OriginFileUrl)) { return; } //创建同步或异步流 FileStream stream = copyFileConfig.IsAsync ? new FileStream(copyFileConfig.OriginFileUrl, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true) : new FileStream(copyFileConfig.OriginFileUrl, FileMode.Open); //定义一个byte数组接受从源文件读出的byte数据 byte[] originalFileBytes = new byte[stream.Length]; using (stream) { //异步读取 if (stream.IsAsync) { //将流和读出的byte[]数据放入配置类 在callBack中可以使用 copyFileConfig.OriginalFileStream = stream; copyFileConfig.OriginalFileBytes = originalFileBytes; if (stream.CanRead) { //异步开始读取 读完后进入End_ReadFileCallBack方法 该方法接受copyFileConfig参数 stream.BeginRead(originalFileBytes, 0, originalFileBytes.Length, End_ReadFileCallBack, copyFileConfig); } } else //同步读取 { if (stream.CanRead) { //一般读取源文件 stream.Read(originalFileBytes, 0, originalFileBytes.Length); } //定义一个写流 在新位置创建文件 FileStream copyStream = new FileStream(copyFileConfig.DestinationFileUrl, FileMode.CreateNew); using (copyStream) { //copyStream.WriteTimeout = READ_OR_WRITE_TIMEOUT; //将源文件的内容写进新文件 copyStream.Write(originalFileBytes, 0, originalFileBytes.Length); copyStream.Close(); } } stream.Close(); Console.ReadLine(); } } }
public RegisterModel( IFileConfig fileConfig, UserManager <ApplicationUser> userManager, SignInManager <ApplicationUser> signInManager, IUserProfileRepository userProfileRepository ) { _fileConfig = fileConfig; _userManager = userManager; _signInManager = signInManager; _userProfileRepository = userProfileRepository; }
/// <summary> /// 根据配置需求,复制文件 /// </summary> /// <param name="config"></param> public static void Copy(IFileConfig config) { lock (_lockObj) { CopyFileConfig copyFileConfig = config as CopyFileConfig; if (copyFileConfig == null) { return; } if (copyFileConfig.OriginalFileUrl == null || copyFileConfig.DestinationFileUrl == null) { return; } if (!File.Exists(copyFileConfig.OriginalFileUrl)) { return; } FileStream stream = copyFileConfig.IsAsync ? new FileStream(copyFileConfig.OriginalFileUrl, FileMode.Open, FileAccess.ReadWrite, FileShare.Read, 4096, true) : new FileStream(copyFileConfig.OriginalFileUrl, FileMode.Open, FileAccess.ReadWrite, FileShare.Read, 4096, false); byte[] originalFileBytes = new byte[stream.Length]; using (stream) { if (stream.CanRead) { if (stream.IsAsync) { // 异步 copyFileConfig.OriginalFileStream = stream; copyFileConfig.OriginalFileBytes = originalFileBytes; stream.BeginRead(originalFileBytes, 0, originalFileBytes.Length, EndReadFileCallBack, copyFileConfig); } else { // 同步 stream.Read(originalFileBytes, 0, originalFileBytes.Length); using (FileStream copyStream = new FileStream(copyFileConfig.DestinationFileUrl, FileMode.Create)) { copyStream.Write(originalFileBytes, 0, originalFileBytes.Length); } } } } } }
public ModuleViewModel(IConnectionLogin sqlLogin, IFileConfig fileConfig, ILogin login) { _loginClass = login; _fileConfig = fileConfig; _sqlLogin = sqlLogin; _mainWindow = new MainWindow(this); _mainWindow.Closing += _mainWindow_Closing; if (_fileConfig.fileEx(configFileName)) { SqlProfile = _fileConfig.GetInfoSQL(configFileName); openLogin(); } else { openReconnect(); } }
public void Log(LogReceivedEventArgs logReceivedEvent) { IFileConfig currentConfig = _fileConfigContainer.Get(logReceivedEvent.LogInfo.LogEvent); if (currentConfig == null) { throw new ConfigurationErrorsException($"{System.Enum.GetName(typeof(LogEvent), logReceivedEvent.LogInfo.LogEvent)} is not supported"); } _fileAnalyzer.FileName = currentConfig.FileName; _fileAnalyzer.LogPath = currentConfig.LogPath; _fileAnalyzer.FileSizeLimit = currentConfig.FileSizeLimit; string logFile = _fileAnalyzer.GetLogFile(); string message = _logMessageCreator.CreateMessage(logReceivedEvent.LogInfo); File.AppendAllText(logFile, message + System.Environment.NewLine); }
public void Copy(IFileConfig config) { lock (_lockObject) { CopyFileConfig fileConfig = config as CopyFileConfig; if (this.CheckConfigIsError(fileConfig)) { return; } FileStream fs = fileConfig.IsAsync ? new FileStream(fileConfig.OriginalFileUrl, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true) : new FileStream(fileConfig.OriginalFileUrl, FileMode.Open); byte[] originalByte = new byte[fs.Length]; using (fs) { if (fs.IsAsync) { fileConfig.OriginalFileByte = originalByte; fileConfig.OriginalStream = fs; if (fs.CanRead) { fs.BeginRead(originalByte, 0, originalByte.Length, End_CreateFileCallBack, fileConfig); } } else { if (fs.CanRead) { fs.Read(originalByte, 0, originalByte.Length); } FileStream fs2 = new FileStream(fileConfig.DestinationFileUrl, FileMode.CreateNew); using (fs2) { fs2.Write(originalByte, 0, originalByte.Length); fs2.Close(); } } } } }
//在該類中實現一個簡單的Create方法用來同步或異步的實現添加文件,FileStream會根據配置類去選擇相應的構造函數,實現異步或同步的添加方式 /// <summary> ///添加文件方法 /// </summary> /// <param name="config">創建文件配置類</param> public void Create(IFileConfig config) { lock (_lockObject) { //得到創建文件配置類對象 var createFileConfig = config as CreateFileConfig; //檢查創建文件配置類是否為空 if (this.CheckConfigIsError(config)) { return; } //假設創建完文件後寫入一段話,實際項目中無需這麼做,這裡只是一個演示 char[] insertContent = " HellowWorld ".ToCharArray(); //轉化成byte[] byte[] byteArrayContent = Encoding.Default.GetBytes(insertContent, 0, insertContent.Length); //根據傳入的配置文件中來決定是否同步或異步實例化stream對象 FileStream stream = createFileConfig.IsAsync ? new FileStream(createFileConfig.CreateUrl, FileMode.Create, FileAccess.ReadWrite, FileShare.None, 4096, true) : new FileStream(createFileConfig.CreateUrl, FileMode.Create); using (stream) { //如果不註釋下面代碼會拋出異常,google上提示是WriteTimeout只支持網絡流// // stream.WriteTimeout = READ_OR_WRITE_TIMEOUT; //如果該流是同步流並且可寫 if (!stream.IsAsync && stream.CanWrite) { stream.Write(byteArrayContent, 0, byteArrayContent.Length); } else if (stream.CanWrite) //異步流並且可寫 { stream.BeginWrite(byteArrayContent, 0, byteArrayContent.Length, this.End_CreateFileCallBack, stream); } stream.Close(); } } }
public static byte[] HashConfig(IFileConfig fileConfig) { if (fileConfig is null) { throw new ArgumentNullException(nameof(fileConfig)); } using var md5 = MD5.Create(); using var stream = new CryptoStream(Stream.Null, md5, CryptoStreamMode.Write); using var writer = new BinaryWriter(stream); writer.WriteDelimiter(); fileConfig.HashConfigValues(value => { writer.Write(value?.ToString() ?? "659ec705-5088-4d68-b22b-3d0672db8d75"); writer.WriteDelimiter(); }); writer.Flush(); stream.FlushFinalBlock(); return(md5.Hash); }
public void Create(IFileConfig config) { lock (_lockObject) { CreateFileConfig fileConfig = config as CreateFileConfig; if (this.CheckConfigIsError(fileConfig)) { return; } char[] insertContent = "HelloWorld".ToCharArray(); byte[] byteArrayContent = Encoding.Default.GetBytes(insertContent, 0, insertContent.Length); FileStream fs = fileConfig.IsAsync ? new FileStream(fileConfig.CreateUrl, FileMode.Create, FileAccess.ReadWrite, FileShare.None, 4096, true) : new FileStream(fileConfig.CreateUrl, FileMode.Create); using (fs) { // 如果不注释下面代码会抛出异常,google上提示是WriteTimeout只支持网络流 //fs.WriteTimeout = WriteTimeout; if (fs.CanWrite && !fs.IsAsync) { fs.Write(byteArrayContent, 0, byteArrayContent.Length); } else if (fs.CanWrite) { fs.BeginWrite(byteArrayContent, 0, byteArrayContent.Length, End_CreateFileCallBack, fs); } Console.WriteLine("正在以 {0} 的方式创建文件", fs.IsAsync ? "异步" : "同步"); fs.Close(); } } }
/// <summary> /// 根据配置需求,创建文件 /// </summary> /// <param name="config"></param> public static void Create(IFileConfig config) { lock (_lockObj) { CreateFileConfig createFileConfig = config as CreateFileConfig; if (createFileConfig == null) { return; } if (createFileConfig.CreateUrl == null) { return; } char[] insertContent = "HelloWorld".ToCharArray(); byte[] byteArrayContent = Encoding.Default.GetBytes(insertContent); FileStream stream = createFileConfig.IsAsync ? new FileStream(createFileConfig.CreateUrl, FileMode.Create, FileAccess.ReadWrite, FileShare.Read, 4096, true) : new FileStream(createFileConfig.CreateUrl, FileMode.Create); using (stream) { if (stream.CanWrite) { if (!stream.IsAsync) { stream.Write(byteArrayContent, 0, byteArrayContent.Length); Console.WriteLine($"同步创建文件地址{stream.Name}"); } else { stream.BeginWrite(byteArrayContent, 0, byteArrayContent.Length, EndCreateFileCallBack, stream); } } } } }
public TaxDataRepository(IFileConfig fileConfig) { _fileConfig = fileConfig; }
public EmployeeRepository(IFileConfig fileConfig) { _fileConfig = fileConfig; }
public FileTag(FileInfo file, IFileConfig fileConfig, ICodeGenerator codeGenerator) { File = file ?? throw new ArgumentNullException(nameof(file)); FileConfig = fileConfig ?? throw new ArgumentNullException(nameof(fileConfig)); CodeGenerator = codeGenerator ?? throw new ArgumentNullException(nameof(codeGenerator)); }
GetCodeGenerators(IFileConfig fileConfig) { var csvConfig = (CsvConfig)fileConfig; var bestTypes = csvConfig.BestTypes; const string csvRecords = nameof(csvRecords); const string csvRecord = nameof(csvRecord); const string reader = nameof(reader); var propIdentifierScope = $"property:{fileConfig.RelativePath}"; var recordProperties = (from bt in bestTypes let propName = bt.Key.ToIdentifier(propIdentifierScope) let csPropType = GetTypeRef(bt.Value) let propDef = $@"public {csPropType} {propName} {{ get; set; }}" let rawValueExpression = $"{csvRecord}[{bt.Key.ToVerbatimString()}]" + // trim values before parsing; don't trim unparsed strings (bt.Value == BestType.String ? "" : ".Trim()") let parser = GetParserCode(bt.Value, rawValueExpression) let propAssignment = $@"{propName} = {parser}" select (propDef, propAssignment, propName, csPropType, rawFieldKey: bt.Key)).ToArray(); SetPropertyExplorerItems(); return (GenerateRecordMembers, GenerateEnumeratorImplementation); void GenerateRecordMembers(TextWriter writer) => writer.WriteLines(recordProperties.Select(x => x.propDef)); string GenerateNewStreamReaderCode() => $"new System.IO.StreamReader({ReaderFilePathPropertyName})"; string GenerateNewTextReaderCode() => csvConfig.Header.IsNullOrWhiteSpace() ? GenerateNewStreamReaderCode() : $@"new Overby.LINQPad.FileDriver.CompositeTextReader(new System.IO.TextReader[] {{ new System.IO.StringReader({(csvConfig.Header.Trim() + Environment.NewLine).ToLiteral()}), {GenerateNewStreamReaderCode()} }})"; void GenerateEnumeratorImplementation(TextWriter writer) => writer.WriteLine($@" using(var {reader} = {GenerateNewTextReaderCode()} ) {{ var {csvRecords} = Overby.Extensions.Text.CsvParsingExtensions .ReadCsvWithHeader({reader}, delimiter: {csvConfig.Delimiter.ToLiteral()}); foreach(var {csvRecord} in {csvRecords}) {{ yield return new {RecordClassName} {{ {recordProperties.Select(rp => rp.propAssignment).StringJoin("," + Environment.NewLine)} }}; }} }} {GenerateIsNullFunction()} {GenerateParseBoolFunction()}"); string GenerateIsNullFunction() { var nullStrings = csvConfig.NullStrings ?? ValueTokens.DefaultNullStrings; var predicates = string.Join(" || ", csvConfig.NullStrings.Values.Select(GetPredicate)); return $"bool IsNull(string value) => {predicates};"; string GetPredicate(string nul) => csvConfig.NullStrings.IgnoreCase ? $"value.Equals({nul.ToLiteral()}, System.StringComparison.OrdinalIgnoreCase)" : $"value == {nul.ToLiteral()}"; } string GenerateParseBoolFunction() { // I don't think there's a point in comparing the false strings; // They were only useful for identifying if the type was boolean or not var trueStrings = csvConfig.TrueStrings?.Values?.Count > 0 ? csvConfig.TrueStrings : ValueTokens.DefaultTrueStrings; var predicates = string.Join(" || ", csvConfig.TrueStrings.Values.Select(GetPredicate)); return $"bool ParseBool(string value) => {predicates};"; string GetPredicate(string s) => csvConfig.TrueStrings.IgnoreCase ? $"value.Equals({s.ToLiteral()}, System.StringComparison.OrdinalIgnoreCase)" : $"value == {s.ToLiteral()}"; } void SetPropertyExplorerItems() { // adds property/column child items to file explorer item csvConfig.PropertyItems = new List<ExplorerItem>( from rp in recordProperties select new ExplorerItem(rp.rawFieldKey, ExplorerItemKind.Property, ExplorerIcon.Column) { DragText = rp.propName, ToolTipText = rp.csPropType }); } }
public IFileConfig UpdateFileConfig(FileInfo file, IFileConfig prevConfig) { var csvConfig = prevConfig as CsvConfig ?? new CsvConfig { Delimiter = GetDefaultDelimiter(), }; csvConfig.BestTypes = GetBestTypes(); return csvConfig; Dictionary<string, BestType> GetBestTypes() { using var fileReader = file.OpenText(); using var reader = GetTextReader(fileReader); var record = new List<string>(); var q = from rec in reader.ReadCsvWithHeader( delimiter: csvConfig.Delimiter, textQualifier: csvConfig.TextQualifier, record: record) select from k in rec.Keys let value = rec.ContainsKey(k) ? rec[k] : string.Empty select (k, value); return TypeInferrer.DetermineBestTypes(q, new TypeInferrer.Options { UserParser = CreateUserParser() }); TypeInferrer.TryParseValue CreateUserParser() { var trueSet = csvConfig.TrueStrings?.GetHashSet(); var falseSet = csvConfig.FalseStrings?.GetHashSet(); var nullSet = csvConfig.NullStrings?.GetHashSet(); return (string v, out ParsedValue x) => { if (trueSet?.Contains(v) == true || falseSet?.Contains(v) == true) { x = ParsedValue.Bool; return true; } if (nullSet?.Contains(v) == true) { x = ParsedValue.EmptyString; return true; } x = default; return false; }; } } TextReader GetTextReader(StreamReader fileReader) { if (string.IsNullOrWhiteSpace(csvConfig.Header)) return fileReader; return new CompositeTextReader(new TextReader[] { new StringReader(csvConfig.Header.Trim() + Environment.NewLine), fileReader }); } char GetDefaultDelimiter() => file.Extension.ToLowerInvariant() switch { ".tsv" => '\t', _ => ',' }; }
public DoctorController(IDoctorRepository doctorRepository, IFileConfig fileConfig) { _doctorRepository = doctorRepository; _fileConfig = fileConfig; }
public void AddOrReplace(IFileConfig fileConfig) { Remove(fileConfig); Files.Add(fileConfig); }
public FileHandlingController(IFileConfig fileConfig) { _fileConfig = fileConfig; }
public PaySlipGenerator(IFileConfig fileConfig) { _fileConfig = fileConfig; }
public void Remove(IFileConfig fileConfig) { Files.RemoveAll(x => x.RelativePath.EqualsI(fileConfig.RelativePath)); }
private bool CheckConfigIsError(IFileConfig config) { //return config != null && config.FileName.Length > 0; return(config == null); }
private bool CheckConfigIsError(IFileConfig config) { throw new NotImplementedException(); }
public bool CheckConfigIsError(IFileConfig config) { return(config == null || string.IsNullOrEmpty(config.FileName)); }