一个关于pipe联接的问题?  
为了不产生监时文件,我用CreateNamedPipe来代替临时文件,但在ConnectNamedPipe时总是通不过!  
程序如下:  
var  
   FileHandle,  MapHandle:  THandle;  
   FFilename,  lpszPipename:  string;  
   PIPE_TIMEOUT:  Integer;  
   bfu:  array  of  Byte;  
   uLen:  DWORD;  
   Se:  TSecurityAttributes;  
   stm:  TMemoryStream;  
begin  
   PIPE_TIMEOUT:=  1000;  
   FFilename:=  'c:\tmp.txt';                                      
   lpszPipename:=  '\\.\pipe\Pipe_tmp';  
   FileHandle  :=  FileOpen  (FFilename,  fmOpenRead  +  fmShareDenyNone);  
   if  FileHandle  =  INVALID_HANDLE_VALUE  then  
       raise  Exception.Create  ('Failed  to  open  '  +  FFilename);  
   BUFSIZE:=  GetFileSize(FileHandle,  nil);  
   SetLength(bfu,  BUFSIZE);  
   FileRead(FileHandle,  bfu[0],  BUFSIZE);  
   FileClose(FileHandle);  
 
   Se.nLength:=Sizeof(TSecurityAttributes);  
   Se.lpSecurityDescriptor:=nil;  
   Se.bInheritHandle:=True;      
 
   MapHandle:=  CreateNamedPipe(PChar(lpszPipename), //  pipe  name  
                   PIPE_ACCESS_DUPLEX,               //  read/write  access  
                   PIPE_TYPE_MESSAGE  or             //  message  type  pipe  
                   PIPE_READMODE_MESSAGE  or         //  message-read  mode  
                   PIPE_WAIT,                        //  blocking  mode  
                   PIPE_UNLIMITED_INSTANCES,         //  max.  instances  
                   BUFSIZE,                          //  output  buffer  size  
                   BUFSIZE,                          //  input  buffer  size  
                   PIPE_TIMEOUT,                     //  client  time-out  
                   @Se);  
   if  MapHandle  =  -1  then  
       raise  Exception.Create('Error!');  
   ConnectNamedPipe(MapHandle,  nil);  ////////////////////到这一步就执行不过去了,  
                                       ///////////////////停在那里不动了!注释掉,后保存出
                                       ////////////////////的文件为0字节  
   uLen:=  0;  
   WriteFile(MapHandle,  bfu[0],  BUFSIZE,  uLen,  nil);  
///////////////////////////////////////  
   //ShowMessage(IntToStr(uLen));  
   stm:=  TMemoryStream.Create;  
   stm.LoadFromFile(lpszPipename);  
   stm.SaveToFile('c:\Result.txt');  
   stm.Free;  
/////////////////////这一段只是为了看一文件对不对  
   DisconnectNamedPipe(MapHandle);  
   CloseHandle(MapHandle);  
end;  
 
///  
哦,也有可能是我操作系统的原因.我用的win2003server,听说在win98下执行就不太正常.  
我的最终目的也不是非用管道不可,只是为了不产生临时文件.如果有其它的办法,能像打开硬盘文件  
一样在内存中打开文件就可以了!  
我前好也用过CreateFileMapping,试用没有成功,如里大侠们有什么更好的方法也可以!  
谢谢了!