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. idea初使用之配置使用maven仓库

    idea使用的理由已经无需多说.现在已经超过了eclipse.java开发种占有44%.第一次使用上手还是挺难的.跟用惯了myeclipse的我来说.对于project的概念深入人心.还理解不了它的M ...

  2. JQUERY MOBILE 中文API站 和 官方论坛

    中文API站:http://www.jqmapi.com/api1.2/preview/quickstartquide.html 官方论坛:http://bbs.phonegapcn.com/foru ...

  3. iOS9 +http请求不能用的解决办法

    报错NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802); 查询得知 iOS9引入了新特性App ...

  4. windows本地script脚本恶意代码分析(带注释)

    //经过样本分析和抓取,该恶意程序是款下载者木马. //不懂的可以百度百科. http://baike.baidu.com/link?url=0dNqFM8QIjEQhD71ofElH0wHGktIQ ...

  5. code of C/C++(2)

    初学者学习构造函数和析构函数,面对如何构造的问题,会头大.这里提供了变量(int,double,string),char *,字符数组三个类型的私有成员初始化的方法 //char * 类型的成员,如何 ...

  6. 《数据结构》2.3单链表(single linked list)

    //单链表节点的定义 typedef struct node { datatype data; struct node *next; }LNode,*LinkList; //LNode是节点类型,Li ...

  7. 在一台机器上模拟mongodb分片

    首先选择一个目录在其中建立以下2个文件夹:data和log 在data下建立9个文件夹: 其中前3个为配置服务器所在文件夹,按照官网要求,一个集群需要3个config server rs-a-n和rs ...

  8. 杭电ACM1003

    原题: Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  9. 64位Win7 VS调试、PLSQL与oracle的连接异常问题

    系统换为64位Win7后,VS与Oracle开发环境出现了很多问题.调试无法连接Oracle,PLSQL无法连接Oracle等一系列问题.下面记录一下处理办法: 1.oracle客户端选择32位进行安 ...

  10. mysql命令行以及mysql workbence查询结果中文乱码的解决方法

    最近正在学习mysql,安装环境是windows server 2003 32位操作系统+mysql 5.1.47同时也安装了mysql命令行以及mysql workbench这里是test数据库cr ...