图像二进制文件的操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图像二进制文件的操作(1/2)
2009年06月10日星期三 20:57
一、操作要点:
∙将文件转换为二进制,再将二进制转回为文件
∙将文件写入到XML,再读出来显示或者还原
∙将文件写入到数据库,再读取出来显示或者还原
二、学习知识点:
二进制操作的类:FileStream(文件流)、BinaryReader(二进制流读取器)、BinaryWriter(二进制流写入器)
三、操作步骤:
(1)新建类:fileToData.cs
using System.IO;
///
/// fileToData 的摘要说明
///
public class fileToData
{
public fileToData() //构造函数
{ }
///
/// 将传进来的文件转换成字符串(二进制)
///
/// 待处理的文件路径
///
public static string FileToBinary(string FilePath)
{
FileStream fs=new FileStream(FilePath,FileMode.Open,FileAccess.Read); //利用新传来的路径实例化一个FileStream对象
int filelength = Convert.ToInt32(fs.Length);
//得到对象的大小
Byte[]filebyteArray=new byte[filelength];
//申明一个byte数组
BinaryReader br = new BinaryReader(fs);
//申明一个读取二进制流的BinaryReader对象
for (int i = 0; i < filelength; i++)
{ //循环数组大小那么多次
br.Read(filebyteArray, 0, filelength); //第一个数组用0表示
//将数据读取出来放在数组中
}
string strData = Convert.ToBase64String(filebyteArray); //8位无符号整数数组ToBase64
//将数组转换为String字符传
return strData;
}
///
/// 将传进来的二进制字符串转换为图片文件
///
/// 保存的路径
/// 需要转换的字符串
public static void BinaryToFile(string path,string Binary)
{
FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write); //利用新传来的路径实例化一个FileStream对象
BinaryWriter bw = new BinaryWriter(fs);
//实例化一个用于写的 BinaryWriter
bw.Write(Convert.FromBase64String(Binary));
//将传近来的二进制字符转换为8位无符号整数数组再写进去
bw.Close(); //关闭二进制流写入器
fs.Close(); //关闭文件流
}
}
(2)将文件转换为二进制及二进制转换为文件的实现(ToBinary.aspx):
public partial class toBinary : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string a=fileToData.FileToBinary(Server.MapPath("~/图片1.gif")); //将图片1转换为二进制
fileToData.BinaryToFile(Server.MapPath("~/图片2.gif"), a); //将二进制转换为图片2
}
}
(3)新建类:FileToxml.cs
加入命名空间:using System.IO;using System.Text;using System.Xml;
///
/// 将文件转换为二进制
///
public class FileToxml
{
public FileToxml()
{
}
///
/// 从上传控件中
///
/// 被加载了文件的FileUpload上传控件
/// XML文件的存放位置
/// 图片的标识ID
public static void FileToXML(FileUpload fu,string xmlPath,Guid id) {
if (fu.HasFile)
{ //先判断FileUpload对象中是否包含了文件
string PathString = fu.FileName;
int FileLength = fu.PostedFile.ContentLength; //只得出带扩展名的文件名
try
{
Byte[] FileByteArray = new byte[FileLenght];
//申明一个大小为文件总字节大的Byte数组以存放即将产生的二进制数据
Stream Streamobj = fu.PostedFile.InputStream;
//创建一个能够读取被上载文件内容的Stream对象
Streamobj.Read(FileByteArray, 0, FileLength);
//使用Stream对象的读取方法,参数说明将数据流存放在刚才申明的数组中,从0开始读,读取的字节数为全部
XmlDocument xdom = new XmlDocument();
if (!File.Exists(xmlPath))
{ //如果不存在XML,则创建
XmlDeclaration xdec = xdom.CreateXmlDeclaration("1.0", "utf-8", null); xdom.AppendChild(xdec); //创建第一行声明
XmlElement Root = xdom.CreateElement("File"); //创建根节点File xdom.AppendChild(Root);
XmlElement RootElement = xdom.CreateElement("Image"); //创建父节点Image