Example #1
0
        /// <summary>
        /// 写入安全 JSON。
        /// </summary>
        /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
        /// <param name="value"></param>
        /// <param name="encoding">给定的 <see cref="Encoding"/>(可选)。</param>
        /// <param name="settings">给定的 <see cref="JsonSerializerSettings"/>(可选)。</param>
        /// <param name="autoCreateDirectory">自动创建目录(可选;默认启用)。</param>
        /// <returns>返回 JSON 字符串。</returns>
        public static string WriteSecureJson(this FilePathCombiner combiner, object value, Encoding encoding = null,
                                             JsonSerializerSettings settings = null, bool autoCreateDirectory = true)
        {
            var json = JsonConvert.SerializeObject(value, settings);

            if (autoCreateDirectory)
            {
                combiner.CreateDirectory();
            }

            if (combiner.Exists())
            {
                combiner.Delete(); // 防止混合现有文件内容
            }
            if (encoding.IsNull())
            {
                encoding = ExtensionSettings.Preference.DefaultEncoding;
            }

            using (var fs = File.OpenWrite(combiner))
                using (var bw = new BinaryWriter(fs, encoding))
                {
                    var buffer = json.FromEncodingString(encoding);
                    bw.Write(buffer.AsAes());
                }

            return(json);
        }
Example #2
0
        /// <summary>
        /// 写入 JSON。
        /// </summary>
        /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
        /// <param name="value"></param>
        /// <param name="encoding">给定的 <see cref="Encoding"/>(可选)。</param>
        /// <param name="formatting">给定的 <see cref="Formatting"/>。</param>
        /// <param name="settings">给定的 <see cref="JsonSerializerSettings"/>(可选)。</param>
        /// <param name="autoCreateDirectory">自动创建目录(可选;默认启用)。</param>
        /// <returns>返回 JSON 字符串。</returns>
        public static string WriteJson(this FilePathCombiner combiner, object value, Encoding encoding = null,
                                       Formatting formatting = Formatting.Indented, JsonSerializerSettings settings = null, bool autoCreateDirectory = true)
        {
            var json = JsonConvert.SerializeObject(value, formatting, settings);

            combiner.WriteAllText(json, encoding, autoCreateDirectory);

            return(json);
        }
Example #3
0
        /// <summary>
        /// 写入所有文本。
        /// </summary>
        /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
        /// <param name="contents">给定的内容集合。</param>
        /// <param name="encoding">给定的 <see cref="Encoding"/>(可选)。</param>
        /// <param name="autoCreateDirectory">自动创建目录(可选;默认启用)。</param>
        public static void WriteAllText(this FilePathCombiner combiner, string contents,
                                        Encoding encoding = null, bool autoCreateDirectory = true)
        {
            if (autoCreateDirectory)
            {
                combiner.CreateDirectory();
            }

            File.WriteAllText(combiner, contents, encoding ?? ExtensionSettings.Preference.DefaultEncoding);
        }
Example #4
0
        /// <summary>
        /// 转换为文件路径组合器。
        /// </summary>
        /// <param name="filePath">给定的文件路径。</param>
        /// <param name="basePath">给定的基础路径。</param>
        /// <returns>返回 <see cref="FilePathCombiner"/>。</returns>
        public static FilePathCombiner AsFilePathCombiner(this string filePath, string basePath = null)
        {
            var combiner = new FilePathCombiner(filePath);

            if (!basePath.IsEmpty())
            {
                combiner.ChangeBasePath(basePath);
            }

            return(combiner);
        }
Example #5
0
        /// <summary>
        /// 读取 JSON。
        /// </summary>
        /// <typeparam name="T">指定的反序列化类型。</typeparam>
        /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
        /// <param name="encoding">给定的 <see cref="Encoding"/>(可选)。</param>
        /// <param name="settings">给定的 <see cref="JsonSerializerSettings"/>(可选)。</param>
        /// <returns>返回反序列化对象。</returns>
        public static T ReadJson <T>(this FilePathCombiner combiner, Encoding encoding = null,
                                     JsonSerializerSettings settings = null)
        {
            var json = combiner.ReadAllText(encoding);

            if (settings.IsNull())
            {
                return(JsonConvert.DeserializeObject <T>(json));
            }

            return(JsonConvert.DeserializeObject <T>(json, settings));
        }
Example #6
0
        /// <summary>
        /// 读取安全 JSON。
        /// </summary>
        /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
        /// <param name="type">给定的反序列化对象类型。</param>
        /// <param name="encoding">给定的 <see cref="Encoding"/>(可选)。</param>
        /// <param name="settings">给定的 <see cref="JsonSerializerSettings"/>(可选)。</param>
        /// <returns>返回反序列化对象。</returns>
        public static object ReadSecureJson(this FilePathCombiner combiner, Type type, Encoding encoding = null,
                                            JsonSerializerSettings settings = null)
        {
            var json = combiner.ReadSecureString(encoding);

            if (settings.IsNull())
            {
                return(JsonConvert.DeserializeObject(json, type));
            }

            return(JsonConvert.DeserializeObject(json, type, settings));
        }
Example #7
0
        public static FilePathCombiner[] AsFilePathCombiners(this string[] filePaths, string basePath = null)
        {
            filePaths.NotNull(nameof(filePaths));

            var combiners = new FilePathCombiner[filePaths.Length];

            for (var i = 0; i < filePaths.Length; i++)
            {
                combiners[i] = filePaths[i].AsFilePathCombiner(basePath);
            }

            return(combiners);
        }
Example #8
0
        private static string ReadSecureString(this FilePathCombiner combiner, Encoding encoding = null)
        {
            List <byte> buffer;

            if (encoding.IsNull())
            {
                encoding = ExtensionSettings.Preference.DefaultEncoding;
            }

            using (var fs = File.OpenRead(combiner))
                using (var br = new BinaryReader(fs, encoding))
                {
                    if (fs.Length < int.MaxValue)
                    {
                        buffer = new List <byte>((int)fs.Length);
                    }
                    else
                    {
                        buffer = new List <byte>();
                    }

                    var chunk = new byte[1024];
                    int readCount;

                    do
                    {
                        readCount = br.Read(chunk, 0, chunk.Length);
                        if (readCount > 0)
                        {
                            if (readCount < chunk.Length)
                            {
                                buffer.AddRange(chunk.Take(readCount));
                            }
                            else
                            {
                                buffer.AddRange(chunk);
                            }
                        }
                    }while (readCount > 0);
                }

            return(buffer.ToArray().FromAes().AsEncodingString(encoding));
        }
Example #9
0
 /// <summary>
 /// 将基础路径转换为 <see cref="DirectoryInfo"/>。
 /// </summary>
 /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
 /// <returns>返回 <see cref="DirectoryInfo"/>。</returns>
 public static DirectoryInfo AsDirectoryInfo(this FilePathCombiner combiner)
 => new DirectoryInfo(combiner?.BasePath);
Example #10
0
 /// <summary>
 /// 写入所有字节数组。
 /// </summary>
 /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
 /// <param name="bytes">给定的字节数组。</param>
 public static void WriteAllBytes(this FilePathCombiner combiner, byte[] bytes)
 => File.WriteAllBytes(combiner, bytes);
Example #11
0
 /// <summary>
 /// 删除文件。
 /// </summary>
 /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
 public static void Delete(this FilePathCombiner combiner)
 => File.Delete(combiner);
Example #12
0
 /// <summary>
 /// 创建基础路径的目录。
 /// </summary>
 /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
 /// <returns>返回 <see cref="DirectoryInfo"/>。</returns>
 public static DirectoryInfo CreateDirectory(this FilePathCombiner combiner)
 => Directory.CreateDirectory(combiner?.BasePath);
Example #13
0
 /// <summary>
 /// 附加所有文本。
 /// </summary>
 /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
 /// <param name="contents">给定的内容集合。</param>
 /// <param name="encoding">给定的 <see cref="Encoding"/>(可选)。</param>
 public static void AppendAllText(this FilePathCombiner combiner, string contents,
                                  Encoding encoding = null)
 => File.AppendAllText(combiner?.Source, contents, encoding ?? ExtensionSettings.Preference.DefaultEncoding);
Example #14
0
 /// <summary>
 /// 文件是否存在。
 /// </summary>
 /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
 /// <returns>返回布尔值。</returns>
 public static bool Exists(this FilePathCombiner combiner)
 => File.Exists(combiner);
Example #15
0
 /// <summary>
 /// 转换为 <see cref="FileInfo"/>。
 /// </summary>
 /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
 /// <returns>返回 <see cref="FileInfo"/>。</returns>
 public static FileInfo AsFileInfo(this FilePathCombiner combiner)
 => new FileInfo(combiner);
Example #16
0
 /// <summary>
 /// 目录是否存在。
 /// </summary>
 /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
 public static void DirectoryExists(this FilePathCombiner combiner)
 => Directory.Delete(combiner?.BasePath);
Example #17
0
 /// <summary>
 /// 读取所有字节数组。
 /// </summary>
 /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
 /// <returns>返回字节数组。</returns>
 public static byte[] ReadAllBytes(this FilePathCombiner combiner)
 => File.ReadAllBytes(combiner);
Example #18
0
 /// <summary>
 /// 附加所有行集合。
 /// </summary>
 /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
 /// <param name="contents">给定的内容集合。</param>
 /// <param name="encoding">给定的 <see cref="Encoding"/>(可选)。</param>
 public static void AppendAllLines(this FilePathCombiner combiner, IEnumerable <string> contents,
                                   Encoding encoding = null)
 => File.AppendAllLines(combiner?.Source, contents, encoding ?? ExtensionSettings.Preference.DefaultEncoding);
Example #19
0
 /// <summary>
 /// 读取所有文本。
 /// </summary>
 /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
 /// <param name="encoding">给定的 <see cref="Encoding"/>(可选)。</param>
 /// <returns>返回字符串。</returns>
 public static string ReadAllText(this FilePathCombiner combiner, Encoding encoding = null)
 => File.ReadAllText(combiner, encoding ?? ExtensionSettings.Preference.DefaultEncoding);
Example #20
0
 /// <summary>
 /// 当作数组。
 /// </summary>
 /// <param name="combiner">给定的 <see cref="FilePathCombiner"/>。</param>
 /// <returns>返回 <see cref="FilePathCombiner"/> 集合。</returns>
 public static FilePathCombiner[] AsArray(this FilePathCombiner combiner)
 {
     combiner.NotNull(nameof(combiner));
     return(new FilePathCombiner[] { combiner });
 }
Example #21
0
 /// <summary>
 /// 尝试解析组合器。
 /// </summary>
 /// <exception cref="ArgumentNullException">
 /// <paramref name="filePath"/> is null or empty.
 /// </exception>
 /// <param name="filePath">给定的文件路径。</param>
 /// <param name="result">输出 <see cref="FilePathCombiner"/>。</param>
 /// <returns>返回布尔值。</returns>
 public static bool TryParseCombiner(string filePath, out FilePathCombiner result)
 {
     result = new FilePathCombiner(filePath);
     return(result.FileName.IsNotNull());
 }