据我所知,seekdir
必须设置当前流的位置。但是如果我设置它 - 它会在下一个d_name
之后为任何位置参数返回相同的readdir
。我只想读取手动输入位置的目录名称,并且不想在其中使用带有readdir
的循环
#include <iostream>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
using namespace std;
int main(int argc, char* argv[])
{
if(argc > 1)
{
DIR* directory = opendir(argv[1]);
if (directory == NULL)
{
cout << "Enter valid directory name" << endl;
return -1;
}
long position = 0;
cout << "Enter position of directory stream: ";
cin >> position;
seekdir(directory, position);
dirent *dir = readdir(directory);
cout << dir->d_name <<":"<< strlen(dir->d_name) << endl;
closedir(directory);
return 0;
}
else
{
return -1;
}
}
答案 0 :(得分:2)
来自POSIX标准
seekdir()函数应设置下一个readdir()的位置 对dirp指定的目录流的操作到该位置 由loc指定。 loc的值应该从一个返回 之前调用telldir()。新的立场恢复到一个位置 执行telldir()时与目录流关联。
如果未通过之前的调用获得loc的值 telldir(),或者如果在调用之间发生了对rewinddir()的调用 telldir()和调用seekdir(),后续调用的结果 readdir()未指定。
换句话说,您不能将seekdir用于让用户输入的位置。仅使用telldir返回的值。所以你只需要编写那个循环。