日期:2014-05-18  浏览次数:20811 次

C# 读写内存文件的问题~~~~提供部分代码巨分相送
请问如何memorystream的内容以文件的形式存放,即可以通过句柄获取内存文件,谢谢!!

------解决方案--------------------
帮顶下
------解决方案--------------------
http://www.x2blog.cn/jinhong618/

.Net 并没有提供进程间通讯的类,只能借助系统的功能来实现了,这里提供一种利用发送消息的方法实现的进程间的通信。

发送方需要调用两个系统API:SendMessage与FindWindow。
非托管定义如下:


[DllImport( "User32.dll ",EntryPoint= "SendMessage ")]
private static extern int SendMessage(/
int hWnd, //目标窗口的handle
int Msg, // 消息
int wParam, // 第一个消息参数
ref COPYDATASTRUCT lParam // 第二个消息参数
);

[DllImport( "User32.dll ",EntryPoint= "FindWindow ")]
private static extern int FindWindow(string lpClassName,string
lpWindowName);


还有一个数据结构:

public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)] public string lpData;
}
WM_COPYDATA消息:

const int WM_COPYDATA = 0x004A;
发送消息代码如下:

int WINDOW_HANDLER = FindWindow(null,@ "接收窗口 ");
if(WINDOW_HANDLER != 0)
{
byte[] sarr = System.Text.Encoding.Default.GetBytes(txtMsg.Text);
int len = sarr.Length;
COPYDATASTRUCT cds;
cds.dwData = (IntPtr) 100;
cds.lpData = txtMsg.Text;
cds.cbData = len + 1;
SendMessage(WINDOW_HANDLER, WM_COPYDATA, 0, ref cds);
}
接收方需要上面的那个数据结构的定义与消息常量的定义,然后重写主窗口的DefWndProc方法:

protected override void DefWndProc(ref System.Windows.Forms.Message m)
{
switch(m.Msg)
{
case WM_COPYDATA:
COPYDATASTRUCT mystr = new COPYDATASTRUCT();
Type mytype = mystr.GetType();
mystr =(COPYDATASTRUCT)m.GetLParam(mytype);
txtMsg.Text =mystr.lpData;
break;
default:
base.DefWndProc(ref m);
break;
}
}
------解决方案--------------------
C#不能操作内存,你怎么写内存文件呀/?
------解决方案--------------------
用系统钩子应该可以的吧...对那东西不懂
------解决方案--------------------
http://community.csdn.net/Expert/topic/5695/5695574.xml?temp=.1097986
------解决方案--------------------

MemoryStream的存储不是文件,所以没有文件句柄。
如果必须要文件句柄方式读写文件的花,可以把MemoryStream的内容存储到一个临时文件(FileStream)里面。
------解决方案--------------------
不清楚
帮顶