首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Windows (C++)的dirent.h中找不到seekdir()

在Windows (C++)的dirent.h中找不到seekdir()
EN

Stack Overflow用户
提问于 2016-08-18 15:33:49
回答 2查看 1.5K关注 0票数 1

我实际上正在做一个项目,我必须浏览目录,为此我使用dirent.h库,因为我不想只使用Boost。

因此,我找到了这篇文章的 in visual studio 2010 or 2008,它指向我下载并安装dirent.h的http://www.softagalleria.net/dirent.php

所以dirent.h已经安装好了,我可以使用基本的函数,比如opendir,readdir,但是当我想使用seekdir()函数时,它似乎不存在于库中,所以我进入dirent.h来验证我的假设,(感谢Ctrl+F) seekdir确实缺失了。

我是否遗漏了什么,或者我必须找到一个技巧才能获得这个函数...?

谢谢你。

EN

回答 2

Stack Overflow用户

发布于 2016-08-18 15:51:48

该标头中唯一可用的函数是:

代码语言:javascript
复制
DIR *opendir (const char *dirname);
struct dirent *readdir (DIR *dirp);
int closedir (DIR *dirp);
void rewinddir (DIR* dirp);

没有获得你需要的功能的诀窍。你只需要找到另一个库就可以了。

票数 0
EN

Stack Overflow用户

发布于 2016-08-19 00:13:48

如果找不到头文件dirent.h,那么可以尝试使用WIN32_FIND_DATAFindFirstFile()FindNextFile()作为替代。提交了两个不同的代码。一个用于Visual Studio 6.o,另一个用于Visual Studio 2013,它需要使用宽字符。

Visual studio 6.0的代码:

代码语言:javascript
复制
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <string>

using namespace std;


void listdirandfiles(string dir){
    HANDLE hFind;
    WIN32_FIND_DATAA data;

    hFind = FindFirstFileA(dir.c_str(), &data);
    if (hFind != INVALID_HANDLE_VALUE) {
        do {
            printf("%s\n", data.cFileName);
        } while (FindNextFile(hFind, &data));
        FindClose(hFind);
    }
}

int main(int argc, char** argv){

        string dir = "c:\\*.*";
        cout<<"\nListing directories or files..\n\n";
        listdirandfiles(dir);

        cout<<"\nPress ANY key to close.\n\n";
        cin.ignore(); cin.get();
return 0;
}

Visual Studio 2013的代码:

代码语言:javascript
复制
// visual studio 2013
// listdirConsoleApplication15.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;


wchar_t *convertCharArrayToLPCWSTR(const char* charArray)
{
    wchar_t* wString = new wchar_t[4096];
    MultiByteToWideChar(CP_ACP, 0, charArray, -1, wString, 4096);
    return wString;
}

void listdirandfiles(char *wstr){
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
    hFind = FindFirstFile(convertCharArrayToLPCWSTR(wstr), &FindFileData);

    do{
        _tprintf(TEXT("%s\n"), FindFileData.cFileName);
    } while (FindNextFile(hFind, &FindFileData));

    FindClose(hFind);

}

int main( )
{

    char *wstr = "c:\\*.*";

    cout << "\nListing directories or files..\n\n";

    listdirandfiles(wstr);

    cout << "\nPress ANY key to close.\n\n";
    cin.ignore(); cin.get();

    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39012366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档