示例#1
0
 public DoctorRepository(ApplicationDbContext context, ITableTrackNotification tableTrackNotification, IUserProfileRepository userProfileRepository, UserManager <ApplicationUser> userManager, IFileConfig fileConfig) : base(context)
 {
     _userManager            = userManager;
     _fileConfig             = fileConfig;
     _tableTrackNotification = tableTrackNotification;
     _userProfileRepository  = userProfileRepository;
 }
示例#2
0
 /// <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();
             }
         }
     }
 }
示例#3
0
            // 然後在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();
                    }
                }
            }
示例#4
0
        /// <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();
                }
            }
        }
示例#5
0
 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);
                     }
                 }
             }
         }
     }
 }
示例#7
0
 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();
     }
 }
示例#8
0
        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);
        }
示例#9
0
        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();
                        }
                    }
                }
            }
        }
示例#10
0
            //在該類中實現一個簡單的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();
                    }
                }
            }
示例#11
0
        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);
        }
示例#12
0
        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();
                }
            }
        }
示例#13
0
 /// <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;
 }
示例#15
0
 public EmployeeRepository(IFileConfig fileConfig)
 {
     _fileConfig = fileConfig;
 }
示例#16
0
 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',
                _ => ','
            };
        }
示例#19
0
 public DoctorController(IDoctorRepository doctorRepository, IFileConfig fileConfig)
 {
     _doctorRepository = doctorRepository;
     _fileConfig       = fileConfig;
 }
示例#20
0
 public void AddOrReplace(IFileConfig fileConfig)
 {
     Remove(fileConfig);
     Files.Add(fileConfig);
 }
 public FileHandlingController(IFileConfig fileConfig)
 {
     _fileConfig = fileConfig;
 }
示例#22
0
 public PaySlipGenerator(IFileConfig fileConfig)
 {
     _fileConfig = fileConfig;
 }
示例#23
0
 public void Remove(IFileConfig fileConfig)
 {
     Files.RemoveAll(x => x.RelativePath.EqualsI(fileConfig.RelativePath));
 }
示例#24
0
 private bool CheckConfigIsError(IFileConfig config)
 {
     //return config != null && config.FileName.Length > 0;
     return(config == null);
 }
示例#25
0
 private bool CheckConfigIsError(IFileConfig config)
 {
     throw new NotImplementedException();
 }
示例#26
0
 public bool CheckConfigIsError(IFileConfig config)
 {
     return(config == null || string.IsNullOrEmpty(config.FileName));
 }