如何将文件存入数据库? 我向实现将文件存入数据库中,我查的资料是将文件以二进制形式存入数据库,然后将文件从数据库中读出来重新构造这个文件。哪位做过这方面的程序啊?给个思路,有参考示例更好多谢了。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.111cn.net/net/33/2e5d36f4ce119fae64a2bb4b46e01247.htm using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;using System.IO;namespace StructTest{ public partial class Form1 : Form { string filename = @"d:\poi.st"; #region 结构体 //90 [StructLayout(LayoutKind.Sequential), Serializable] public struct MY_STRUCT { public double x; //点的经度坐标 public double y; //点的纬度坐标 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)] public string Name; //Name[40]; //名称 public long PointID; //点的ID号 public long TypeCode; //客户不使用该字段 } #endregion public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { MY_STRUCT[] arr = new MY_STRUCT[2]; MY_STRUCT np = new MY_STRUCT(); np.x = 114.123456; np.y = 23.56789; np.Name = "珠海市政府"; np.PointID = Convert.ToInt64(1234); np.TypeCode = Convert.ToInt64(65); arr[0] = np; np = new MY_STRUCT(); np.x = 115.123456; np.y = 24.56789; np.Name = "珠海市政府2"; np.PointID = Convert.ToInt64(1235); np.TypeCode = Convert.ToInt64(66); arr[1] = np; int structSize = Marshal.SizeOf(typeof(MY_STRUCT)); byte[] temp = new byte[structSize * arr.Length]; byte[] temp1 = Struct2Byte(arr[0]); byte[] temp2 = Struct2Byte(arr[1]); Array.Copy(temp1, 0, temp, 0, temp1.Length); Array.Copy(temp2, 0, temp, structSize, temp2.Length); WriteInfo(temp); } public void WriteInfo(byte[] bt) { if (File.Exists(filename)) { File.Delete(filename); return; } FileStream fs = new FileStream(filename, FileMode.Create); BinaryWriter bw = new BinaryWriter(fs); bw.Write(bt); bw.Flush(); bw.Close(); fs.Close(); MessageBox.Show("保存成功!"); } public byte[] ReadInfo(string file) { FileStream fs = new FileStream(file, FileMode.Open); BinaryReader br = new BinaryReader(fs); byte[] bt = br.ReadBytes(144); br.Close(); fs.Close(); return bt; } private void button2_Click(object sender, EventArgs e) { byte[] bt = ReadInfo(filename); int structSize = Marshal.SizeOf(typeof(MY_STRUCT)); int num = bt.Length / structSize; for (int i = 0; i < num; i++) { byte[] temp = new byte[structSize]; Array.Copy(bt, i * structSize, temp, 0, structSize); MY_STRUCT np = new MY_STRUCT(); np = Byte2Struct(temp); } } private MY_STRUCT Byte2Struct(byte[] arr) { int structSize = Marshal.SizeOf(typeof(MY_STRUCT)); IntPtr ptemp = Marshal.AllocHGlobal(structSize); Marshal.Copy(arr, 0, ptemp, structSize); MY_STRUCT rs = (MY_STRUCT)Marshal.PtrToStructure(ptemp, typeof(MY_STRUCT)); Marshal.FreeHGlobal(ptemp); return rs; } private byte[] Struct2Byte(MY_STRUCT s) { int structSize = Marshal.SizeOf(typeof(MY_STRUCT)); byte[] buffer = new byte[structSize]; //分配结构体大小的内存空间 IntPtr structPtr = Marshal.AllocHGlobal(structSize); //将结构体拷到分配好的内存空间 Marshal.StructureToPtr(s, structPtr, false); //从内存空间拷到byte数组 Marshal.Copy(structPtr, buffer, 0, structSize); //释放内存空间 Marshal.FreeHGlobal(structPtr); return buffer; } }}来自http://www.cnblogs.com/baishahe/archive/2010/03/18/1688995.html 画图重绘疑问 急求 ZedGraph 怎么用? Winform里的reportViewer控件的问题 多线程程序为何自动关闭 【SOS】【SOS】【SOS】【SOS】【SOS】【SOS】【SOS】【SOS】【SOS】50分 如何把几十张小图片加载到窗体中 数据的二次查 一个简单的c#删除问题。 使用了Devexpress控件的程序运行不了 怎样声明方法参数中的enum? 类之间如何传数据 如何把比较长的16进制字符串转换成数字:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO;namespace StructTest
{
public partial class Form1 : Form
{ string filename = @"d:\poi.st"; #region 结构体 //90 [StructLayout(LayoutKind.Sequential), Serializable]
public struct MY_STRUCT
{
public double x; //点的经度坐标
public double y; //点的纬度坐标
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
public string Name; //Name[40]; //名称
public long PointID; //点的ID号
public long TypeCode; //客户不使用该字段
} #endregion public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
MY_STRUCT[] arr = new MY_STRUCT[2]; MY_STRUCT np = new MY_STRUCT();
np.x = 114.123456;
np.y = 23.56789;
np.Name = "珠海市政府";
np.PointID = Convert.ToInt64(1234);
np.TypeCode = Convert.ToInt64(65); arr[0] = np; np = new MY_STRUCT();
np.x = 115.123456;
np.y = 24.56789;
np.Name = "珠海市政府2";
np.PointID = Convert.ToInt64(1235);
np.TypeCode = Convert.ToInt64(66); arr[1] = np; int structSize = Marshal.SizeOf(typeof(MY_STRUCT));
byte[] temp = new byte[structSize * arr.Length];
byte[] temp1 = Struct2Byte(arr[0]);
byte[] temp2 = Struct2Byte(arr[1]); Array.Copy(temp1, 0, temp, 0, temp1.Length);
Array.Copy(temp2, 0, temp, structSize, temp2.Length); WriteInfo(temp);
}
public void WriteInfo(byte[] bt)
{
if (File.Exists(filename))
{
File.Delete(filename);
return;
} FileStream fs = new FileStream(filename, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(bt);
bw.Flush(); bw.Close();
fs.Close(); MessageBox.Show("保存成功!");
} public byte[] ReadInfo(string file)
{
FileStream fs = new FileStream(file, FileMode.Open);
BinaryReader br = new BinaryReader(fs); byte[] bt = br.ReadBytes(144);
br.Close();
fs.Close(); return bt;
} private void button2_Click(object sender, EventArgs e)
{
byte[] bt = ReadInfo(filename); int structSize = Marshal.SizeOf(typeof(MY_STRUCT));
int num = bt.Length / structSize; for (int i = 0; i < num; i++)
{
byte[] temp = new byte[structSize];
Array.Copy(bt, i * structSize, temp, 0, structSize); MY_STRUCT np = new MY_STRUCT();
np = Byte2Struct(temp);
}
}
private MY_STRUCT Byte2Struct(byte[] arr)
{
int structSize = Marshal.SizeOf(typeof(MY_STRUCT));
IntPtr ptemp = Marshal.AllocHGlobal(structSize);
Marshal.Copy(arr, 0, ptemp, structSize);
MY_STRUCT rs = (MY_STRUCT)Marshal.PtrToStructure(ptemp, typeof(MY_STRUCT));
Marshal.FreeHGlobal(ptemp);
return rs;
} private byte[] Struct2Byte(MY_STRUCT s)
{
int structSize = Marshal.SizeOf(typeof(MY_STRUCT));
byte[] buffer = new byte[structSize];
//分配结构体大小的内存空间
IntPtr structPtr = Marshal.AllocHGlobal(structSize);
//将结构体拷到分配好的内存空间
Marshal.StructureToPtr(s, structPtr, false);
//从内存空间拷到byte数组
Marshal.Copy(structPtr, buffer, 0, structSize);
//释放内存空间
Marshal.FreeHGlobal(structPtr);
return buffer;
} }
}
来自
http://www.cnblogs.com/baishahe/archive/2010/03/18/1688995.html