簡體   English   中英

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

[英]Cannot find seekdir() in dirent.h for Windows (C++)


我實際上是在一個項目上,我必須瀏覽目錄,為此,我使用dirent.h庫,因為我不想為此使用Boost。
因此,我在Visual Studio 2010或2008中找到了該帖子<dirent.h>,該鏈接指向http://www.softagalleria.net/dirent.php ,在此下載並安裝了dirent.h。
這樣就安裝了dirent.h,使用opendir,readdir等基本函數沒有問題,但是當我想使用seekdir()函數時,似乎該庫中不存在它,因此我在dirent.h中驗證了我的假設並且(感謝Ctrl + F)seekdir確實丟失了。
我是否錯過了某些東西,或者我必須找到技巧來獲得此功能...?
感謝您。

該標頭中唯一可用的功能是:

DIR *opendir (const char *dirname);
struct dirent *readdir (DIR *dirp);
int closedir (DIR *dirp);
void rewinddir (DIR* dirp);

沒有技巧可以獲取所需的功能。 您只需要為此找到另一個庫。

在此處輸入圖片說明

如果找不到頭文件dirent.h嘗試使用WIN32_FIND_DATAFindFirstFile()FindNextFile()作為替代方案。 提交了兩個不同的代碼。 一個用於Visual Studio 6.o,另一個用於Visual Studio 2013,這需要使用寬字符。

Visual Studio 6.0的代碼:

#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的代碼:

// 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM