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 ...
随机推荐
- PHP注册审核做法
1.注册页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- OC NSString 基本操作(用到补充持续更新)
1.将字符串拆分成数组 NSString *string = @"1,2,3,4"; NSArray *array = [string componentsSeparatedByS ...
- 笔记:linux下mysql设置utf-8编码方法
一:查看mysql版本 1.1 mysql –V 在终端界面输入上面命令.显示如下: mysql Ver 14.14 Distrib 5.5.35, fordebian-linux-gnu (x86_ ...
- windows8.1下javaweb环境搭建及基本配置(jdk+tomcat+eclipse)
1.下载安装jdk在无空格的路径下,否则在linux下可能出问题.配置环境变量: a.新建系统变量——JAVA_HOME,值——D:\programming\java\jdk8 // win8下若建为 ...
- 黑马程序员——C语言基础 变量类型 结构体
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)变量类型 1)局部变量 1> 定义:在函数内部定义的变量,称为 ...
- 【转】修改LINUX时间
命令格式为: date -s 时间字符串 例如只修改系统的日期,不修改时间(时分秒) date -s 2012-08-02 或只修改时间不修改日期 date -s 10:08:00 当然也可以同时修改 ...
- centos 7 下安装numpy、scipy等python包
本文适用于刚入门的小白,欢迎大牛们批评指正. 因为要开始数据分析,而python又不像R和matlab那么简洁.需要安装的包很多~ 网上找了好多牛人博客,想在centos7下安装numpy,scipy ...
- 作业七:团队项目——Alpha版本冲刺阶段006
今日进展:完成主体代码. 今日安排:对程序主体进行编写.
- hibernate 返回新插入数据的Id
例如 表明 studentInfo String sql="set set nocount on studentInfo(列名,列名) values('值','值');select @@id ...
- 涵涵和爸爸习惯养成进度表(三)(June 25 - )
规则说明 23天内,没有哭脸,不超过三个无表情脸,可以给一个奖励(动画书等) 涵涵违反规则,在爸爸和妈妈都同意的情况下,可以给无表情脸 爸爸违反规则,在妈妈和涵涵都同意的情况下,可以给无表情脸 获奖记 ...