createfile失败(createfile调用失败)
一、vc函数GetFileTime获取文件夹的访问时间时问题
通常,文件、文件夹的时间属性指的是创建时间、最近访问时间和最近修改时间等几个具体属性。对于文件的上述属性可以通过GetFileTime()来获取,对于文件夹,在通过CreateFile()函数将其打开后,其获取得到的句柄可以当作文件句柄来使用。因此,通过GetFileTime()函数同样也可以得到文件夹的时间属性。GetFileTime()函数原型如下:
BOOLGetFileTime(
HANDLE hFile,//文件句柄
LPFILETIME lpCreationTime,//创建时间的地址
LPFILETIME lpLastAccessTime,//最近访问时间的地址
LPFILETIME lpLastWriteTime//最近修改时间的地址
);
其中后三个参数均是指向FILETIME结构的指针,得到的也都是UTC时间,如果需要,可以通过FileTimeToLocalFileTime()函数将此UTC时间转化成本地时间。而且还可以进一步通过FileTimeToSystemTime()函数将其从文件时间格式转化成系统时间格式,转化后的时间格式将保存在一个SYSTEMTIME结构对象中。类似的,在将时间信息写入到文件夹属性时,如果不是文件时间格式也应当通过SystemTimeToFileTime()函数将其从系统时间格式转换成文件时间格式,然后再通过SetFileTime()函数将指定的时间写入到文件夹的时间属性中去。这样,在进行数据备份和恢复的过程中,包括根目录在内的所有文件夹都可以保持时间属性的一致。
//获取指定文件夹的时间属性,入口参数DirName指定了待处理的文件夹,
//stime为一指向SYSTEMTIME结构的指针
BOOLCSetForderTimeDlg::GetDirTime(CString DirName, SYSTEMTIME&stime){
//打开文件夹
HANDLE hDir= CreateFile(DirName,GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_DELETE,
NULL, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS, NULL);
FILETIME lpCreationTime;//文件夹的创建时间
FILETIME lpLastAccessTime;//对文件夹的最近访问时间
FILETIME lpLastWriteTime;//文件夹的最近修改时间
//获取文件夹时间属性信息
if(GetFileTime(hDir,&lpCreationTime,&lpLastAccessTime,&lpLastWriteTime)){
FILETIME ftime;
FileTimeToLocalFileTime(&lpLastWriteTime,&ftime);//转换成本地时间
FileTimeToSystemTime(&ftime,&stime);//转换成系统时间格式
}
CloseHandle(hDir);//关闭打开过的文件夹
return retval;
}
//设置指定文件夹的时间属性,入口参数DirName指定了待处理的文件夹,
//new_time为一指向SYSTEMTIME结构的指针
BOOLCSetForderTimeDlg::SetDirTime(CString DirName, SYSTEMTIME new_stime){
//打开目录的Win32 API调用
HANDLE hDir= CreateFile(DirName,GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_DELETE,
NULL, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS, NULL);
FILETIME lpCreationTime;//文件夹的创建时间
FILETIME lpLastAccessTime;//对文件夹的最近访问时间
FILETIME lpLastWriteTime;//对文件夹的最近修改时间
SystemTimeToFileTime(&new_stime,&lpCreationTime);//转换成文件时间格式
SystemTimeToFileTime(&new_stime,&lpLastAccessTime);
SystemTimeToFileTime(&new_stime,&lpLastWriteTime);
CloseHandle(hDir);//关闭文件夹
return retval;
}
二、IoGetDeviceObjectPointer打开串口失败
楼主发表于:2010-01-04 09:51:30
请教各位:
我在wince6.0下面在打开com口的时候(CreateFile())提示失败.我用的是ENFORA的例子.在BIB和REG文件里面都已经添加了模拟器对应文件下面的一些命令.但是在烧完OS后正常加载RIL的过程中,从TRACE信息显示如下:
RILDrv: E: CComHandle::OpenDownstreamPort: Couldn't open downstream port
RILDrv: E: RIL_Init: RIL failed to initialize
因为我使用的是ENFORA,在RILMDD部分的Comhandle中查找的是注册表的ComPort和ComPortNotifications两个.我查看IMGENFORA的时候发现只有ComPort而且对应的分别如下:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\RIL]
"Dll"="rilgsm.dll"
;DEVFLAGS_LOADLIBRARY 0x00000002// Use LoadLibrary instead of LoadDriver
"Flags"=dword:2
"Index"=dword:1
"Order"=dword:3
"Prefix"="RIL"
"ComPort"="COM7:"
"RebootOKEvName"="Mux0710_RebootOK"; name of the event used to signal reboot OK
"RebootKOEvName"="Mux0710_RebootKO"; name of the event used to signal reboot failure
和
; COM1 for underlying GSM 07.10
[HKEY_LOCAL_MACHINE\Software\Microsoft\GSM07_10]
"ComPort"="COM1:"
"BaudRate"=dword:1C200; 115200
"FrameOption"=dword:1; Advanced
而ComPortNotifications根本在IMGENFORA里面没有,如果找不到ComHandle会默认拿Com2来CreateFile。
我现在是拿target的串口来作为连接modem的口。
请问各位我到底需要怎么样来调整我的Com口。使得数据可以正确的传输。谢谢!
#1楼得分:0回复于:2010-01-04 09:56:38
是否Software\Microsoft\GSM07_10对应的COM1表示的是RIL的抽象COM7\9对应的真实地物理串口?谢谢!
#2楼得分:0回复于:2010-01-04 10:18:58
根据你的注册表,打开的时候createfile应该用的是RIL1。
#3楼得分:0回复于:2010-01-04 10:46:12
也就是说是COM7这个虚拟口?
那我要如何与串口对应上(通过0710?)?
为什么我的Com7会打不开呢?谢谢!
#4楼得分:0回复于:2010-01-04 11:40:01
如果要使用ENFORA驱动(内部已经修改为对应Modem指令/)。我需要将如下三个环境变量设置成1吗?
IMGFAKERIL= IMGTTPCOM= IMGENFORA=1
我不需要用TTPCOM是否也需要设置IMGTTPCOM=1???IMGFAKERIL呢?
启动ENFORA是否也需要启动710Mux,如是该如何启动呢?谢谢!
#5