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 ...
随机推荐
- Java: IO 学习小结
源: 键盘 System.in 硬盘 FileStream 内存 ArrayStream 目的: 控制台 System.out 硬盘 FileStream 内存 ArrayStream 处理大文件或者 ...
- [转] c# 模拟Asp.net页面中的某个按钮的点击,向web服务器发出请求
在没有做题目中所述的内容的时候,感觉这应该是很简单的东西,但是当真正开始做的时候却发现,有很多问题现在在这里写出来,供和我一样水平不高的参考一下. 在写本文之前参照了一下文章 欢迎使用CSDN论坛阅读 ...
- HTML5 和HTML4的区别
1.推出理由和目标 HTml5的出现,对于web来说意义是非常重大的,因为它的意图是想要把目前web 上存在的各种问题一并解决掉. (1)web之间的兼容性很低 (2)文档结构不明确 (3)web应用 ...
- 使用ASP.NET上传图片汇总
1 使用标准HTML来进行图片上传 前台代码: <body> <form id="form1" runat="server"> ...
- 在 Windows 上安装 Laravel 5.x
由于工作中要用到 Laravel ,所以在此记录以备忘. 下载并设置 PHP 进入 http://windows.php.net/download/ 下载 PHP 5.5.x 的最新版本.如果你用的是 ...
- http Content-type对照表
http://tools.jb51.net/table/http_content_type Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定 义网络文件的类型和 ...
- jdbc调用存储过程和函数
1.调用存储过程 public class CallOracleProc { public static void main(String[] args) throws Exception{ Stri ...
- 【初级】linux cp 命令详解及使用方法实战
cp:复制文件或者目录 前言: cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不 ...
- SQL IF ELSE
if (条件) begin (执行模块) endelse if (条件) begin (执行模块) endelse begin ...
- DotNetBar for Windows Forms 12.2.0.7_冰河之刃重打包版原创发布-带官方示例程序版
关于 DotNetBar for Windows Forms 12.2.0.7_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...