C# 将对象保存为文件 读取文件并转为对象 压缩文件 解压缩文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO.Compression;
using System.Diagnostics;

namespace chmPrinter
{
    public class SaveFile
    {
        public SaveFile()
        { }

        private static SaveFile _instance;
        public static SaveFile Instance
        {
            get
            {
                if (_instance == null) _instance = new SaveFile();
                return _instance;
            }
        }

        public object GetObjectData(string filename)
        {
            Stream Read = null;
            string strErr = "";

            try
            {
                FileInfo FI = new FileInfo(filename);

                if (FI.Exists)
                {
                    Read = FI.OpenRead();
                    BinaryFormatter BF = new BinaryFormatter();

                    byte[] aa = (byte[])BF.Deserialize(Read);

                    return DecompressToObject(aa);
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                strErr = ex.ToString();
            }
            finally
            {
                if (Read != null)
                {
                    Read.Close();
                }
            }
            return null;
        }

        //新方法
        public T GetObject<T>(string filename)
        {
            object obj = GetObjectData(filename);
            if (obj != null)
            {
                return (T)obj;
            }
            return default(T);

            //Stream Read = null;
            //string strErr = "";

            //try
            //{
            //    FileInfo FI = new FileInfo(filename);

            //    if (FI.Exists)
            //    {
            //        Read = FI.OpenRead();
            //        BinaryFormatter BF = new BinaryFormatter();

            //        byte[] aa = (byte[])BF.Deserialize(Read);

            //        return DecompressToObject<T>(aa);
            //    }
            //    else
            //    {
            //        return default(T);
            //    }
            //}
            //catch (Exception ex)
            //{
            //    strErr = ex.ToString();
            //}
            //finally
            //{
            //    if (Read != null)
            //    {
            //        Read.Close();
            //    }
            //}
            //return default(T);
        }

        public void SaveObjectData(string filename, object _data)
        {
            Stream Write = null;
            try
            {
                FileInfo FI = new FileInfo(filename);
                if (FI.Exists) FI.Delete();
                Write = FI.OpenWrite();
                BinaryFormatter BF = new BinaryFormatter();
                byte[] aa = CompressedToBytes(_data);
                BF.Serialize(Write, aa);
            }
            catch (Exception ex)
            {
                string str = ex.Message;
            }
            finally
            {
                if (Write != null)
                {
                    Write.Close();
                }
            }
        }

        //新方法
        public void SaveObject<T>(string filename, T _data)
        {
            SaveObjectData(filename, _data);

            //Stream Write = null;
            //try
            //{
            //    FileInfo FI = new FileInfo(filename);
            //    if (FI.Exists) FI.Delete();
            //    Write = FI.OpenWrite();
            //    BinaryFormatter BF = new BinaryFormatter();
            //    byte[] aa = CompressedToBytes<T>(_data);
            //    BF.Serialize(Write, aa);
            //}
            //catch (Exception ex)
            //{
            //    string str = ex.Message;
            //}
            //finally
            //{
            //    if (Write != null)
            //    {
            //        Write.Close();
            //    }
            //}
        }

        private byte[] CompressedToBytes(object obj)
        {
            MemoryStream ms = new MemoryStream();
            DeflateStream zip = new DeflateStream(ms, CompressionMode.Compress, true);
            try
            {
                BinaryFormatter serializer = new BinaryFormatter();
                serializer.Serialize(zip, obj);
                zip.Close();
                byte[] ary = ms.ToArray();
                ms.Close();
                return ary;
            }
            catch (Exception )
            {
                //Log.write(e.Message);
                zip.Close();
                ms.Close();
                return null;
            }
        }

        //新方法
        //private byte[] CompressedToBytes<T>(T obj)
        //{
        //    MemoryStream ms = new MemoryStream();
        //    DeflateStream zip = new DeflateStream(ms, CompressionMode.Compress, true);
        //    try
        //    {
        //        BinaryFormatter serializer = new BinaryFormatter();
        //        serializer.Serialize(zip, obj);
        //        zip.Close();
        //        byte[] ary = ms.ToArray();
        //        ms.Close();
        //        return ary;
        //    }
        //    catch (Exception e)
        //    {
        //        //Log.write(e.Message);
        //        zip.Close();
        //        ms.Close();
        //        return null;
        //    }
        //}

        private object DecompressToObject(byte[] ary)
        {
            MemoryStream ms = new MemoryStream(ary);
            DeflateStream UnZip = new DeflateStream(ms, CompressionMode.Decompress);

            try
            {
                BinaryFormatter serializer = new BinaryFormatter();
                object obj = serializer.Deserialize(UnZip);
                UnZip.Close();
                ms.Close();
                return obj;
            }
            catch (Exception )
            {
                //Log.write(e.Message);
                UnZip.Close();
                ms.Close();
                return null;
            }
        }

        //新方法
        //private T DecompressToObject<T>(byte[] ary)
        //{
        //    MemoryStream ms = new MemoryStream(ary);
        //    DeflateStream UnZip = new DeflateStream(ms, CompressionMode.Decompress);

        //    try
        //    {
        //        BinaryFormatter serializer = new BinaryFormatter();
        //        object obj = serializer.Deserialize(UnZip);
        //        UnZip.Close();
        //        ms.Close();
        //        return (T)obj;
        //    }
        //    catch (Exception e)
        //    {
        //        //Log.write(e.Message);
        //        UnZip.Close();
        //        ms.Close();
        //        return default(T);
        //    }
        //}

        /// <summary>
        /// 压缩指定文件
        /// </summary>
        /// <param name="rarexefile">rar.exe文件名</param>
        /// <param name="rarFilename">指定要压缩的文件名</param>
        /// <param name="archfile">指定要生成的压缩包名称(可选)</param>
        /// <returns>bool</returns>
        public bool inRarFile(string rarexefile, string rarFilename, string archfile)
        {
            try
            {
                string[] paths = rarFilename.Split(‘\\‘);
                string _strPath = rarFilename.Substring(0, rarFilename.Length - paths[paths.Length - 1].Length);
                string _filename = paths[paths.Length - 1].ToString();

                if (_filename.ToLower().EndsWith("rar.exe")) return true;

                FileInfo rar = new FileInfo(rarexefile);

                if (!rar.Exists) return false;

                FileInfo rarfile = new FileInfo(rarFilename);

                if (!rarfile.Exists) return false;

                Process tempPro = new Process();
                tempPro.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                tempPro.StartInfo.FileName = rarexefile;
                tempPro.StartInfo.WorkingDirectory = _strPath;
                if (archfile.Trim().Equals(""))
                {
                    tempPro.StartInfo.Arguments = "a " + "\"" + _filename + ".rar" + "\" " + "\"" + _filename + "\"";
                }
                else
                {
                    tempPro.StartInfo.Arguments = "a " + "\"" + archfile + "\" " + "\"" + _filename + "\"";
                }
                tempPro.Start();
                tempPro.WaitForExit();
                return true;
            }
            catch (Exception )
            {
                return false;
            }
        }

        /// <summary>
        /// 假定当前运行目录下存在rar.exe文件的情况下,将指定的.rar文件解压到指定目录
        /// </summary>
        /// <param name="rarFilename">指定的.rar文件</param>
        /// <param name="_topath">要解压到的目录</param>
        /// <returns>bool</returns>
        public bool outRarFile(string rarFilename, string _topath)
        {
            try
            {
                FileInfo rar = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "rar.exe");
                if (!rar.Exists) return false;

                FileInfo rarfile = new FileInfo(rarFilename);
                if (!rarfile.Exists) return false;

                Process tempPro = new Process();
                tempPro.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                tempPro.StartInfo.FileName = rar.FullName;
                tempPro.StartInfo.WorkingDirectory = _topath;
                tempPro.StartInfo.Arguments = "x " + rarFilename + " -y -v -r -o+";
                tempPro.Start();
                tempPro.WaitForExit();
                System.Threading.Thread.Sleep(1000);

                return true;
            }
            catch (Exception ee)
            {
                string str = ee.Message;
                return false;
            }
        }

        public bool Rarpath(string rarexefile, string rarFilename, string archfile)
        {
            try
            {
                string[] paths = rarFilename.Split(‘\\‘);
                string _strPath = rarFilename.Substring(0, rarFilename.Length - paths[paths.Length - 1].Length);
                string _filename = paths[paths.Length - 1].ToString();

                DirectoryInfo _pathinfo = new DirectoryInfo(rarFilename);
                if (!_pathinfo.Exists) return false;

                FileInfo rar = new FileInfo(rarexefile);

                if (!rar.Exists) return false;

                Process tempPro = new Process();
                tempPro.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                tempPro.StartInfo.FileName = rarexefile;
                tempPro.StartInfo.WorkingDirectory = _strPath;

                if (archfile.Trim().Equals(""))
                {
                    tempPro.StartInfo.Arguments = " a " + "\"" + _filename + ".rar" + "\" " + "\"" + _filename + "\"";
                }
                else
                {
                    tempPro.StartInfo.Arguments = " a -ap " + "\"" + archfile + "\" " + "\"" + _filename + "\"";
                }
                tempPro.Start();
                tempPro.WaitForExit();
                return true;
            }
            catch (Exception )
            {
                return false;
            }
        }

        public bool Rarpathfiles(string rarexefile, string rarFilename, string _filefilter, string archfile)
        {
            try
            {
                string[] paths = rarFilename.Split(‘\\‘);
                string _strPath = rarFilename.Substring(0, rarFilename.Length - paths[paths.Length - 1].Length);
                string _filename = paths[paths.Length - 1].ToString();

                DirectoryInfo _pathinfo = new DirectoryInfo(rarFilename);
                if (!_pathinfo.Exists) return false;

                FileInfo rar = new FileInfo(rarexefile);

                if (!rar.Exists) return false;

                Process tempPro = new Process();
                tempPro.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                tempPro.StartInfo.FileName = rarexefile;
                tempPro.StartInfo.WorkingDirectory = rarFilename;

                if (archfile.Trim().Equals(""))
                {
                    tempPro.StartInfo.Arguments = " a " + "\"" + _filename + ".rar" + "\" " + "\"" + _filefilter + "\"";
                }
                else
                {
                    tempPro.StartInfo.Arguments = " a -ap " + "\"" + archfile + "\" " + "\"" + _filefilter + "\"";
                }
                tempPro.Start();
                tempPro.WaitForExit();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
    }
}
时间: 2024-10-11 00:12:25

C# 将对象保存为文件 读取文件并转为对象 压缩文件 解压缩文件的相关文章

C#压缩、解压缩文件(夹)(rar、zip)

主要是使用Rar.exe压缩解压文件(夹)(*.rar),另外还有使用SevenZipSharp.dll.zLib1.dll.7z.dll压缩解压文件(夹)(*.zip).需要注意的几点如下: 1.注意Rar.exe软件存放的位置,此次放在了Debug目录下 2.SevenZipSharp.dll.zLib1.dll.7z.dll必须同时存在,否则常报“加载7z.dll错误”,项目引用时,只引用SevenZipSharp.dll即可 3.另外找不到7z.dll文件也会报错,测试时发现只用@"..

zip4j加密压缩、解压缩文件、文件夹

原文:http://blog.csdn.net/k21325/article/details/54376188 1.首先,引用到zip4j的第三方类库,感谢作者的无私奉献,官网打不开,这里就不贴了,下面是maven仓库的jar包 <!-- https://mvnrepository.com/artifact/net.lingala.zip4j/zip4j --> <dependency> <groupId>net.lingala.zip4j</groupId>

Linux命令(十六) 压缩或解压缩文件和目录 zip unzip

目录 1.命令简介 2.常用参数介绍 3.实例 4.直达底部 命令简介 zip 是 Linux 系统下广泛使用的压缩程序,文件压缩后扩展名为 ".zip". zip 命令用来将文件压缩成常用的 zip 格式,unzip 命令则用来解压缩zip文件. 返回目录 常用参数介绍 zip 命令常见的参数如下所示: -a 将文件转成 ASCⅡ 模式 -F 尝试修复损坏的压缩文件 -h 显示帮助界面 -m 将文件压缩后,删除源文件 -n 不压缩具有特定字尾字符串的文件 -o 将压缩文件内的所有文件

Linux命令(十八) 压缩或解压缩文件和目录 gzip gunzip

目录 1.命令简介 2.常用参数介绍 3.实例 4.直达底部 命令简介 和 zip 命令类似,gzip 用于文件的压缩,gzip压缩后的文件扩展名为 ".gz",gzip默认压缩后会删除源文件. gunzip用于解压经过 gzip 压缩过的文件. 返回目录 常用参数介绍 一.gzip 常用参数说明 -d 对压缩文件进行解压 -r 递归压缩指定目录及其子目录下的所有文件 -t 检查压缩文件的完整性 -v 对于每个压缩和解压缩的文档,显示相应的文件名和压缩比 -l 显示压缩文件的压缩信息

Linux压缩与解压缩文件

1 将tgz文件解压到指定目录. tar zxvf test.tgz -C 指定目录 比如:将 test.tgz 解压到 /home目录:tar zxvf test.tgz -C /home 2 将指定目录压缩到指定文件.tgz. 比如:将 test目录中的文件 压缩到 new.tgz tar zcvf new.tgz test 3 tar是linux中常用的打包.压缩.解压缩工具,下面列举它的常用参数. -z:压缩 或 解压 -c:打包 -x:解包 -v:打包 或 解包的过程中显示文档 -f:

使用zip/unzip压缩、解压缩文件

今天项目升级模块中有需要进行解压缩操作,本来打算使用创建进程调用winrar工具的方式来解压,在VS2008环境下也是能跑通的,但是因为产品升级程序是以windows服务的方式运行的,使用这个方式怎么都行不通,进程能正常退出,但是就是解压不出来,进程管理器中也显示winrar进程没有退出,可能导致解压后的文件未释放,至于具体原因,暂时还未明了,希望有经验的朋友指点一下!但是项目还得继续做啊,因此只能换其他方式了. 通过在网上查找资料,找到了这个东东,http://www.codeproject.

PostgreSql那点事(文件读取写入、命令执行的办法)

? 2013/07/9 作者: admin PostgreSql那点事(文件读取写入.命令执行的办法) 今天无意发现了个PostgreSQL环境,线上学习了下,一般的数据注射(读写数据库)差异不大,不做讨论,个人比较关心PostgreSQL的文件读取和命令执行方面. 1,文件读取/写入 PostgreSQL 8.1 以后提供了一组现成的文件操作函数 pg_logdir_ls().pg_ls_dir().pg_file_rename().pg_file_write(). pg_read_file(

HTML5---17.html5中的文件读取

FireReader 文件读取器 构造函数--->生产对象 对象:属性 方法 事件 属性: result 方法: readAsText():结果是文本 readAsBinaryString():结果是二进制的字符串 readAsDataURL():结果是数据地址 事件:onload 读取成功的事件 应用场景:即时预览 原文地址:https://www.cnblogs.com/Tobenew/p/10509621.html

文件-读取与编码检测

文件存放在硬盘是以二进制方式存储,读取出来需要对其根据字符编码表进行转换,python3默认以utf-8编码. utf8三个字节一个字符,gbk两个字节一个字符 文件读取 以utf-8编码打开gbk存储的文件并读取内容 f=open(file='test.txt',mode='r',encoding='utf-8') data=f.read() f.close() print(data) file:需打开的文件 mode:打开方式 encoding:打开的编码格式 以gbk方式打开即可正常读取

C++实现文件压缩及解压缩

原理:Huffman树的应用:Huffman编码,为出现频率较高的字符指定较短的码字,而为出现频率较低的字符指定较短的码字,可以实现二进制文件的压缩. Heap.h #pragma once #include <vector> //仿函数 template<class T> struct Lesser { bool operator()(const T& l, const T& r) { return l < r; } }; template<class