【发布时间】:2015-08-26 23:34:14
【问题描述】:
在我正在编写的程序中,有一个函数可以从特定目录中获取所有文件名并将它们放入一个向量中,以便稍后在程序中使用它们。
但是,这也会抓取恰好位于文件夹中的所有隐藏文件。我试图让程序删除所有以“.”开头的文件,但这对我正在测试的文件夹不起作用(我仍然将“..”列为文件)。
这是代码部分:
while (handle != INVALID_HANDLE_VALUE)
{
filenameList.push_back(search_data.cFileName);
if (FindNextFile(handle, &search_data) == FALSE)
break;
}
//removes a lot of hidden files from the file list
for (int i = 0; i < filenameList.size(); i++)
{
string hiddenCheck = filenameList[i];
if (hiddenCheck[0] == '.')
{
filenameList.erase(filenameList.begin() + i);
i = 0;
}
【问题讨论】:
-
你试过调试你的代码吗? e.检查检测或擦除是否不起作用?
-
I still get ".." listed as a file这不是隐藏文件,而是预期的行为。只需自己过滤掉“..”(以及“.”)(不,我不是指任何以点开头的东西,而只是点本身) -
我所说的隐藏文件都是以“.”开头的,比如“.thumbs”、“.dsstore”或“.bridge”。我尝试了各种方法来搜索文件名开头的点,比如使用 char 变量而不是字符串来搜索,但没有一个会删除所有隐藏文件。
-
与其把隐藏的文件塞进vector然后取出来,不如早点测试,一开始就不放进去呢?还要考虑如果从列表中删除最后一项,for 循环的退出条件会发生什么。在您使用 Erase-Remove Idiom 时查看它。
-
正如其他人所说,文件名中的点不会使任何东西隐藏在 Windows 中......