0

据我所知,seekdir必须设置当前流位置。但是如果我设置它 - 它d_name在 next 之后的任何位置参数都返回相同的值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;
    }
}
4

1 回答 1

3

来自 POSIX 标准

seekdir() 函数应将 dirp 指定的目录流上的下一个 readdir() 操作的位置设置为 loc 指定的位置。loc 的值应该是从先前对telldir() 的调用中返回的。执行telldir() 时,新位置恢复为与目录流关联的位置。

如果 loc 的值不是从之前对 telldir() 的调用中获得的,或者如果在调用 telldir() 和调用 seekdir() 之间发生了对 rewinddir() 的调用,则后续调用 readdir() 的结果未指定。

换句话说,您不能将 seekdir 用于让用户输入的位置。只有从telldir 返回的值。所以你只需要编写那个循环。

于 2013-05-01T20:49:55.470 回答