阅读:2234回复:6
请教:怎么判断文件是否存在
想在打开一个文件时,判断指定的目录下是否存在这个文件,若不存在则重定向到另一个目录去打开
怎么判断指定目录下是不是存在这个文件?通过判断哪个返回值? 若不存在,能不能替换FILE_OBJECT中的FileName,然后返回IO_REPARSE这样来重定向 谢谢! |
|
驱动小牛
![]() |
沙发#
发布于:2007-06-07 17:27
如果不是以CREATE_NEW的方式打开,在IoCallDriver之后会返回状态:STATUS_OBJECT_NAME_COLLISION.
要重解析文件名,需要修改FileObject,并返回REPARSE. |
|
板凳#
发布于:2007-06-06 13:36
帮帮忙,指点一下吧
![]() |
|
地板#
发布于:2007-06-05 15:27
我在完成事件之后打印IoStatus.Information出来,
若是成功打开,返回的是FILE_OPENED, 若是试图打开一个不存在的文件,返回的是FILE_SUPERSEDED 都不是FILE_EXISTS或FILE_DO_NOT_EXIST ,没法判断文件是否存在???? devia大侠说的重用create的IRP是什么意思? 我就是在sfcreate完成之后判断的,是不是不对? 谢谢阿! |
|
地下室#
发布于:2007-05-18 17:31
感觉逻辑上面有问题
“如果不存在这个文件,就重定向“如果不存在这个文件就不会有关于这个文件的irp传入,也就没办法重定向了。系统判断一个文件是否存在应该IRP_MJ_DIRECTORY_CONTROL的时候处理,所以你这个时候解决应该比较好一点 |
|
5楼#
发布于:2007-05-17 14:32
十分感谢devia 的指点!
我还想问一下,在SfCreate中,应该在什么时候判断 IoStatus.Information 是否是FILE_EXISTS,要在等待完成例程之后吗? 谢谢! |
|
6楼#
发布于:2007-05-16 17:29
1. 判断文件是否存在:(重用Create的IRP)Open文件然后判断IRP中的
IoStatus.Information是否为FILE_EXISTS; 2. 如果需要重定向简单的替换FILE_OBJECT中的FileName存在问题, 因为文件名由RelatedFileObject、FileName和irpSp->Flags共同决定 |
|
|