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(, rarFilename.Length - paths[paths.Length - ].Length);
string _filename = paths[paths.Length - ].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(); 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(, rarFilename.Length - paths[paths.Length - ].Length);
string _filename = paths[paths.Length - ].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(, rarFilename.Length - paths[paths.Length - ].Length);
string _filename = paths[paths.Length - ].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;
}
}
}
}

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

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

    主要是使用Rar.exe压缩解压文件(夹)(*.rar),另外还有使用SevenZipSharp.dll.zLib1.dll.7z.dll压缩解压文件(夹)(*.zip).需要注意的几点如下: 1.注 ...

  2. Linux压缩与解压缩文件

    1 将tgz文件解压到指定目录. tar zxvf test.tgz -C 指定目录 比如:将 test.tgz 解压到 /home目录:tar zxvf test.tgz -C /home 2 将指 ...

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

    目录 1.命令简介 2.常用参数介绍 3.实例 4.直达底部 命令简介 zip 是 Linux 系统下广泛使用的压缩程序,文件压缩后扩展名为 ".zip". zip 命令用来将文件 ...

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

    目录 1.命令简介 2.常用参数介绍 3.实例 4.直达底部 命令简介 和 zip 命令类似,gzip 用于文件的压缩,gzip压缩后的文件扩展名为 ".gz",gzip默认压缩后 ...

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

    原文:http://blog.csdn.net/k21325/article/details/54376188 1.首先,引用到zip4j的第三方类库,感谢作者的无私奉献,官网打不开,这里就不贴了,下 ...

  6. PPT文件流转为图片,并压缩成ZIP文件输出到指定目录

    实现流程: 接收InputStream流->复制流->InputStream流转为PPT->PPT转为图片->所有图片压缩到一个压缩文件下 注意: 1.PPT文件分为2003和 ...

  7. tar命令-压缩,解压缩文件

    tar: -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 上面五个参数是独立的,压缩解压都要用到其中一个,可以和下面的命令连用但只能用其 ...

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

    • 2013/07/9 作者: admin PostgreSql那点事(文件读取写入.命令执行的办法) 今天无意发现了个PostgreSQL环境,线上学习了下,一般的数据注射(读写数据库)差异不大,不 ...

  9. tensorflow文件读取

    1.知识点 """ 注意:在tensorflow当中,运行操作具有依赖性 1.CPU操作计算与IO计算区别: CPU操作: 1.tensorflow是一个正真的多线程,并 ...

  10. 极简 Node.js 入门 - 3.2 文件读取

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

随机推荐

  1. CodeForces #362 div2 B. Barnicle

    题目链接: B. Barnicle 题意:给出科学计数法 转化成十进制的整数或小数 并输出. 思路:暑假训练赛见过了,当时大腿A掉了,并表示是道水题. 刷CF再次遇见,毫不留情WA了几次.比如: 0. ...

  2. 学习winform第三方界面weiFenLuo.winFormsUI.Docking.dll

    控件dockpanel中提供了几个可用的类, 重要的有两个, 一是DockPanel, 一是DockContent, DockPanel是从panel继承出来的, 用于提供可浮动的dock的子窗口进行 ...

  3. 安装CAD2006装好了为什么不能用,显示系统错误无法启动此程序,因计算机丢失aclst.dll。尝试重新安装该程序以解

    我的电脑,右键 属性——>高级选项卡(win7的是高级系统设置)——>环境变量——>系统变量——>然后新建系统变量 变量名为:AutoCAD 变量值为:c:\program f ...

  4. Redis学习笔记~实现消息队列比MSMQ更方便

    什么是队列:简单的说就是数据存储到一个空间里(可以是内存,也可以是物理文件),先存储的数据对象,先被取出来,这与堆栈正好相反,消息队列也是这样,将可能出现高并发的数据进行队列存储,并按着入队的顺序依次 ...

  5. JAVA动手动脑多态

    动手实验一:下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么? m=d; d=m; d=(Dog)m; d=c; c=(Cat)m; 先进行自我判断,得出结论后,运行TestCas ...

  6. 在数据库中varchar与char的区别

    char是固定长度类型 varchar是可变的长度类型 char和varchar类型相似,但是它们的存储和检索方式不同.在MySQL5.0.3,它们在最大长度和是否保留尾部空格也不相同. char和v ...

  7. python学习09——字典(3)

    今天写了一道python字典题目,用了上次字典(2)中的方法,代码如下: json = {', 'IP':'10.0.0.1'} def find_value(themap, word): if wo ...

  8. react-native start 运行流程

    在CMD下键入 C:\Node_JS\MyAwesomeProject>react-native start 运行流程: C:\Users\Grart\AppData\Roaming\npm\r ...

  9. Android ShapeDrawable

    今天做项目碰到一个这样的情况,就是颜色指示框,用的是正方形边框是黑色的,里面填充颜色,颜色值是动态的,为了解决这个问题,查了好多资料,终于找到解决的方法,利用ShapeDrawable,我们自定义一个 ...

  10. c#第三方控件地址

    原文:http://blog.csdn.net/wpcxyking/article/details/6249825 首先感谢博文原者,分享这么有价值的内容,特此感谢. DevExpress 出品 Dx ...