WriteFile和OpenDialog控件有冲突??? ( 积分: 20 )

  • 主题发起人 主题发起人 sy0116
  • 开始时间 开始时间
S

sy0116

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个小程序中放了一个OpenDialog控件,写了这样一些代码:<br>type<br>&nbsp;&nbsp;TIRC=packed&nbsp;record<br>&nbsp;&nbsp;&nbsp;&nbsp;iMouseAction:Integer;<br>&nbsp;&nbsp;&nbsp;&nbsp;iIrcCode:DWORD;<br>&nbsp;&nbsp;&nbsp;&nbsp;sCmd:array&nbsp;[0..1023]&nbsp;of&nbsp;Char;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;PIRC=^TIRC;<br>type<br>&nbsp;&nbsp;_WriteFile=function(h:THandle;buf:Pointer;size:DWORD;var&nbsp;byt:DWORD;p:Pointer):Cardinal;stdcall;<br><br>var<br>&nbsp;&nbsp;pArrList:array&nbsp;[0..255]&nbsp;of&nbsp;PIRC;<br>&nbsp;&nbsp;MyWriteFile:_WriteFile;<br><br>procedure&nbsp;TForm1.suiButton1Click(Sender:&nbsp;TObject);<br>begin<br>&nbsp;&nbsp;if&nbsp;OpenDialog1.Execute&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;Path:=OpenDialog1.FileName;<br>&nbsp;&nbsp;suiEdit5.Text:=Path;<br>end;<br>//……中间省略一段把suiEdit5.Text复制到一个ArrStr:Array&nbsp;[0..255]&nbsp;of&nbsp;Char的字符数组中去的代码<br>procedure&nbsp;SaveFile;<br>begin<br>//省略一些无关代码<br>&nbsp;&nbsp;hCFGFile:=CreateFile('sy0116.cfg',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GENERIC_WRITE,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE_SHARE_WRITE,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nil,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CREATE_ALWAYS,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE_ATTRIBUTE_NORMAL,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0);<br>&nbsp;&nbsp;for&nbsp;i:=0&nbsp;to&nbsp;k&nbsp;-1&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;MyWriteFile(hCFGFile,pArrList,SizeOf(TIRC),dwbytes,nil);<br>&nbsp;&nbsp;end;<br>end;<br>现在的问题是,如果suiEdit5中的文字是通过键盘输入的话那么这段代码执行一切正常,sy0116.cfg文件中可以正确记录下我要记录的数据,但如果通过点击鼠标然后从OpenDialog中得到文件路径则文件中不能记下我要记录的内容,而且用GetLastError也得不到任何错误,但是此时如果把CreateFile的第一个参数改成:<br>PChar((ExtractFilePath(ParamStr(0)))+&nbsp;'/sy0116.cfg'),<br>则又可以正确记录数据了,不知各位有没有遇到过这样的问题,另外,sy0116.cfg这个文件之前是用CreateFile打开过并且用ReadFile读取过数据然后CloseHandle过的
 
刚才检查了一下发现了问题所在:调用OpenDialog后程序的CurrentDirectory就变了,所以sy0116.cfg出现在了OpenDialog所选择的文件所在的文件夹里面
 
后退
顶部