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(, 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# 将对象保存为文件 读取文件并转为对象 压缩文件 解压缩文件的更多相关文章
- C#压缩、解压缩文件(夹)(rar、zip)
主要是使用Rar.exe压缩解压文件(夹)(*.rar),另外还有使用SevenZipSharp.dll.zLib1.dll.7z.dll压缩解压文件(夹)(*.zip).需要注意的几点如下: 1.注 ...
- Linux压缩与解压缩文件
1 将tgz文件解压到指定目录. tar zxvf test.tgz -C 指定目录 比如:将 test.tgz 解压到 /home目录:tar zxvf test.tgz -C /home 2 将指 ...
- Linux命令(十六) 压缩或解压缩文件和目录 zip unzip
目录 1.命令简介 2.常用参数介绍 3.实例 4.直达底部 命令简介 zip 是 Linux 系统下广泛使用的压缩程序,文件压缩后扩展名为 ".zip". zip 命令用来将文件 ...
- Linux命令(十八) 压缩或解压缩文件和目录 gzip gunzip
目录 1.命令简介 2.常用参数介绍 3.实例 4.直达底部 命令简介 和 zip 命令类似,gzip 用于文件的压缩,gzip压缩后的文件扩展名为 ".gz",gzip默认压缩后 ...
- zip4j加密压缩、解压缩文件、文件夹
原文:http://blog.csdn.net/k21325/article/details/54376188 1.首先,引用到zip4j的第三方类库,感谢作者的无私奉献,官网打不开,这里就不贴了,下 ...
- PPT文件流转为图片,并压缩成ZIP文件输出到指定目录
实现流程: 接收InputStream流->复制流->InputStream流转为PPT->PPT转为图片->所有图片压缩到一个压缩文件下 注意: 1.PPT文件分为2003和 ...
- tar命令-压缩,解压缩文件
tar: -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 上面五个参数是独立的,压缩解压都要用到其中一个,可以和下面的命令连用但只能用其 ...
- PostgreSql那点事(文件读取写入、命令执行的办法)
• 2013/07/9 作者: admin PostgreSql那点事(文件读取写入.命令执行的办法) 今天无意发现了个PostgreSQL环境,线上学习了下,一般的数据注射(读写数据库)差异不大,不 ...
- tensorflow文件读取
1.知识点 """ 注意:在tensorflow当中,运行操作具有依赖性 1.CPU操作计算与IO计算区别: CPU操作: 1.tensorflow是一个正真的多线程,并 ...
- 极简 Node.js 入门 - 3.2 文件读取
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
随机推荐
- OC语言中BOOL 和 bool 区别
1.类型不同 BOOL为int型: bool为布尔型: 2.长度不同 bool只有一个字节: BOOL长度视实际环境来定,一般可认为是4个字节: 3.取值不同 bool取值false和true,是0和 ...
- sql 多行转换为一行
select 字段1, [val]=( select 字段2 +',' from 表名 as b where b.字段1 = a.字段1 for xml path('')) from 表名 as a ...
- session_id 恢复 session的内容
php的session是可以程序恢复的,这个和java不太一样.session的恢复机制可以实现多个应用程序session的共享,因为php的session都是以文件形式或者数据库存储的.首先是ses ...
- daydayup1 codeforces141c
题意:给定n个数字,代表每个人前面有几个人比他高,让你构造一个height数组,满足条件 思路:直接贪心就好,假设到第i个人,设他的高度为i-a[i]+1,前面比他高的人每个人的高度加1
- 深入replace
replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. stringObject.replace(reg/str,str/replacement); 这里主 ...
- IE下new Date不支持传参数的解决
在FF gloogle浏览器中 用js实例化Date对象时 各种参数都可以换传啊. var date = new Date("2014-10-1 10:24:31"); var d ...
- 第二讲(核心c#)
一.C#类型 .字段和局部变量的作用域冲突 using System; namespace Wrox { public class ScopeTest2 { ; public static void ...
- 关于C#的内存释放问题
最近在做一个要循环读取xml文件的功能. 想法是读取一个文件,释放一个文件,这样就不会消耗太多内存. 结果运行起来内存不停涨,最后内存溢出.用gc,disponse,异步都没有用. 后来改成relea ...
- WPF学习笔记1---初接触
刚刚接触WPF,微软的一套东西.WPF最大的特点就是UI设计与代码逻辑的完全剥离.这样美工和程序员的分工就变得非常清楚.因为界面和程序的耦合度很低,也增加的代码的灵活性和可重用性. 微软为WPF的UI ...
- nginx 高并发配置参数(转载)
声明:原文章来自http://blog.csdn.net/oonets334/article/details/7528558.如需知道更详细内容请访问. 一.一般来说nginx 配置文件中对优化比较有 ...