关于findfirstfile和findnextfile在2000server下的有关问题
关于findfirstfile和findnextfile在2000server下的问题
想用这两个api实现对指定文件夹进行 监控的功能:找出所有的文件并循环使用findnextfile,当有新文件时立即输出.
问题1:findfirstfile找到的文件有什么规律,是随机找到的吗
问题2:下面的代码在xp,2000pro都没有问题,但在2000server下可以找到文件夹中的已有文件,但新文件却找不到.for循环中的findnextfile找不到新文件.
源代码:
#include "windows.h "
#include <stdio.h>
#include <string.h>
void Find(TCHAR *szDir)
{
TCHAR szTempDir[MAX_PATH + 1];
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
strcpy(szTempDir,szDir); //把文件路径拷到szTempDir
strcat(szTempDir, "*.* "); //*.*表示所有类型文件
hFind = FindFirstFile(szTempDir,&FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf ( "Invalid File Handle. Get Last Error reports %d\n ", GetLastError ());
}
else
{
int a=1;
do
{
if( (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
&& strcmp(FindFileData.cFileName, ". ")
&& strcmp(FindFileData.cFileName, ".. "))
{
TCHAR szNewDir[MAX_PATH+1];
strcpy(szNewDir,szDir);
strcat(szNewDir,FindFileData.cFileName);
strcat(szNewDir, "\\ ");
Find(szNewDir);
}
else
{
if(strcmp(FindFileData.cFileName, ". ")==0||strcmp(FindFileData.cFileName, ".. ")==0)
{a=FindNextFile(hFind,&FindFileData);
continue;}
printf ( "The file found is %s\n ", FindFileData.cFileName);
}
//===============
for(;;)
{a=FindNextFile(hFind,&FindFileData);
if(a)
{
break;
}Sleep(1100);
printf( "123ddddddddddddddddddddddddddddddd46%d\n ",GetLastError());
}
Sleep(200);
}while(a);
FindClose(hFind);
}
}
void main()
{
Find( "d:\\test3\\ ");
}
------解决方案--------------------
1。HANDLE FindFirstFile(
LPCTSTR lpFileName, // pointer to name of file to search for
LPWIN32_FIND_DATA lpFindFileData
// pointer to returned information
);
findnextfile找到第一个参数 "lpFileName "所指定的文件或目录,所以不是随机的。该函数返回了一个handle,可以用来作为FindNextFile的参数
2。会不会还没有生成呢?
------解决方案--------------------
findfile()是不是 真的找的是硬盘文件么?
也许它找的只是系统为了优化搜索和查找文件而内部维护的硬盘文件树,
然后在XP,2000pro下这个树更新的很快,或者没采用这种方式,而2000server里这个树更新的很慢..所以新添加的暂时没被发现..
猜想而已,
因为linux系统下是有这样的一棵树的.
另外,监视一个文件夹,我记得有专门的代码的,象这样会不会性能差了点..你可以通知系统,你正在监督这个文件夹,系统发现变化后,会通知你的.. 细节暂时手头没那书,当初只是草草看了两眼. 你可以百度下,或许那个代码就是你写的这个.
------解决方案--------------------
想用这两个api实现对指定文件夹进行 监控的功能:找出所有的文件并循环使用findnextfile,当有新文件时立即输出.
问题1:findfirstfile找到的文件有什么规律,是随机找到的吗
问题2:下面的代码在xp,2000pro都没有问题,但在2000server下可以找到文件夹中的已有文件,但新文件却找不到.for循环中的findnextfile找不到新文件.
源代码:
#include "windows.h "
#include <stdio.h>
#include <string.h>
void Find(TCHAR *szDir)
{
TCHAR szTempDir[MAX_PATH + 1];
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
strcpy(szTempDir,szDir); //把文件路径拷到szTempDir
strcat(szTempDir, "*.* "); //*.*表示所有类型文件
hFind = FindFirstFile(szTempDir,&FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf ( "Invalid File Handle. Get Last Error reports %d\n ", GetLastError ());
}
else
{
int a=1;
do
{
if( (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
&& strcmp(FindFileData.cFileName, ". ")
&& strcmp(FindFileData.cFileName, ".. "))
{
TCHAR szNewDir[MAX_PATH+1];
strcpy(szNewDir,szDir);
strcat(szNewDir,FindFileData.cFileName);
strcat(szNewDir, "\\ ");
Find(szNewDir);
}
else
{
if(strcmp(FindFileData.cFileName, ". ")==0||strcmp(FindFileData.cFileName, ".. ")==0)
{a=FindNextFile(hFind,&FindFileData);
continue;}
printf ( "The file found is %s\n ", FindFileData.cFileName);
}
//===============
for(;;)
{a=FindNextFile(hFind,&FindFileData);
if(a)
{
break;
}Sleep(1100);
printf( "123ddddddddddddddddddddddddddddddd46%d\n ",GetLastError());
}
Sleep(200);
}while(a);
FindClose(hFind);
}
}
void main()
{
Find( "d:\\test3\\ ");
}
------解决方案--------------------
1。HANDLE FindFirstFile(
LPCTSTR lpFileName, // pointer to name of file to search for
LPWIN32_FIND_DATA lpFindFileData
// pointer to returned information
);
findnextfile找到第一个参数 "lpFileName "所指定的文件或目录,所以不是随机的。该函数返回了一个handle,可以用来作为FindNextFile的参数
2。会不会还没有生成呢?
------解决方案--------------------
findfile()是不是 真的找的是硬盘文件么?
也许它找的只是系统为了优化搜索和查找文件而内部维护的硬盘文件树,
然后在XP,2000pro下这个树更新的很快,或者没采用这种方式,而2000server里这个树更新的很慢..所以新添加的暂时没被发现..
猜想而已,
因为linux系统下是有这样的一棵树的.
另外,监视一个文件夹,我记得有专门的代码的,象这样会不会性能差了点..你可以通知系统,你正在监督这个文件夹,系统发现变化后,会通知你的.. 细节暂时手头没那书,当初只是草草看了两眼. 你可以百度下,或许那个代码就是你写的这个.
------解决方案--------------------