阅读:2126回复:12
关于delphi编写filedisk应用程序----help!
openfileinformation中filename=array[0..0] of char,若文件名为e:\\temp\\file0.img,如何把此文件传入openfileinformation.filename呢?
恳请大老指点小弟!给分 被老板逼的,希望大侠同情小弟则个! :o :o :o |
|
沙发#
发布于:2004-06-05 22:59
openfileinformation中filename=array[0..0] of char,若文件名为e:\temp\file0.img,如何把此文件传入openfileinformation.filename呢? 对不起啊,我不知道有没有误导你了 array[0..0]of char 只能有一个字符,要想传入多个字符,那要用动态分配的 我对openfileinformation不熟悉,你试试 type chars=array[0..0]of char; var a:^chars; begin Getmem(a,10);这样a^就可放10个字符 end |
|
板凳#
发布于:2004-06-06 22:10
谢谢楼上的!
POPEN_FILE_INFORMATION = ^OPEN_FILE_INFORMATION; OPEN_FILE_INFORMATION = RECORD Read_only : boolean; FileSize : int64; Filenamelength : word; filename : array[0..0] of char; end; 以上为结构定义 var pfile:pchar; volumename:='\\.\ :'; volumename[5]:='j'; device := createfile(pansichar(volumename),GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE , NiL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, 0); if device<>INVALID_HANDLE_VALUE then begin MessageDlg('the disk is using!', mtWarning,[mbAbort], 0); exit; end ; devicename :='\device\filedisk\filedisk0'; if DefineDosDevice(DDD_RAW_TARGET_PATH,@volumename[5],pchar(devicename)) then begin showmessage('ddddddddddddddddd'); end; device := createfile(pansichar(volumename),GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE , NiL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, 0); if device = INVALID_HANDLE_VALUE then begin MessageDlg('somthing is error!', mtWarning,[mbAbort], 0); exit; end ; allocmem(sizeof(OPEN_FILE_INFORMATION) + strlen('e:\temp\444.img') + 4); pfile:='\\.\e:\temp\444.img'; strcopy(openfileinformation.Filename,pfile); openfileinformation.Read_only:=false; openfileinformation.FileSize:=2*1024*1024; openfileinformation.Filenamelength:=strlen(openfileinformation.filename); IF DeviceIoControl(device,IOCTL_FILE_DISK_OPEN_FILE,@openfileinformation, sizeof(open_file_information)+openfileinformation.filenamelength-1, nil,0,bytesreturned,nil) then showmessage('fffffffffffffffff,ok'); // freemem(openFileInformation.filename[0]); closehandle(device); 在执行DeviceIoControl老是出错或不成功,请指教! |
|
地板#
发布于:2004-06-06 22:13
怪事,少了'\'了
中间两行: allocmem(sizeof(OPEN_FILE_INFORMATION) + strlen('e:\temp\444.img') + 4); pfile:='\\.\e:\temp\444.img'; |
|
地下室#
发布于:2004-06-06 22:16
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
|
5楼#
发布于:2004-06-07 10:30
怪事,少了''了 什么问题? typedef struct _OPEN_FILE_INFORMATION { LARGE_INTEGER FileSize; BOOLEAN ReadOnly; USHORT FileNameLength; UCHAR FileName[1]; } OPEN_FILE_INFORMATION, *POPEN_FILE_INFORMATION; 中的FileName只定义一个字符的数组,实际上他是存心要 数组超界使用(因为文件名不止一个字符)。 他分配空间的时候,是分配sizeof(open_file_information)+文件名长度-sizeof(UCHAR) UCHAR FileName[1];对应FileName : Array[0..0]of char;没错。 但是FileName要超界使用delphi中不那么直观。 |
|
6楼#
发布于:2004-06-07 10:43
谢谢!
delphi中该如何处理呢? |
|
7楼#
发布于:2004-06-07 16:34
delphi中数组也可越界吗?
拜托! :( :( :( |
|
8楼#
发布于:2004-06-09 08:17
UCHAR FileName[1];对应FileName : Array[0..0]of char;没错。
但是FileName要超界使用delphi中不那么直观。 转成Pchar类型使用,如 PChar(FileName) 如果要将值传入FileName的话,首先内存空间要分配足 strcpy(PChar(FileName),a) 没有delphi调试 [编辑 - 6/9/04 by p2o5x] |
|
9楼#
发布于:2004-06-09 15:45
定义filename array[0..0] of char好想不行吧?
应定义指针 pchar ? 能聊一下吗?QQ 50994497 |
|
10楼#
发布于:2004-06-10 22:04
定义filename array[0..0] of char好想不行吧? 我上qq了,给你发了信息加好友,没见回音。 C++中 filename :UCHAR[1]; 死板地对到delphi中 就是 filename:array[0..0]of char; 我觉得没错。 但要在里面放一个文件名,要做特殊处理, 比如分配的时候,给filename分配n个字节空间,而在delphi中 实际上filename能访问的只能是头一个字节。 所以符值给filename的时候,要用内存拷贝的方法直接将数据 拷到filename所在内存为起点的n个字节。 同样要读出filename的值时,如果用filename直接读,在delphi中 就只能读头一个字节。因为是以0结尾的字符,所以可以将filename的地址给一个pchar类型的变量,则这个变量就可以读出该字符串。 可能说得不是很清楚,还请斟酌 |
|
11楼#
发布于:2004-06-17 09:44
多谢!
我终于完成了delphi编写filedisk应用程序! :D :D :D |
|
12楼#
发布于:2004-11-17 14:41
大哥能不能给我一份d版的filedisk啊
我的邮箱是fanshiyou@163.com |
|