2016-08-18 7 views
1


私は実際にプロジェクトに取り組んでいます。ディレクトリを参照する必要があります。このためには、使用したくないのでdirent.hライブラリを使用しています。そのためだけにブースト。
したがって、私はこの記事<dirent.h> in visual studio 2010 or 2008を見つけました。http://www.softagalleria.net/dirent.phpここでdirent.hをダウンロードしてインストールしました。
dirent.hがインストールされていて、opendir、readdirのような基本的な機能を使用しても問題はありませんが、seekdir()関数を使用したいときはライブラリに存在しないと思われますので、私の仮説と(感謝のCtrl + F)seekdirは実際に行方不明です。
私は何かが恋しくなるか、この機能を得るためのトリックを見つけなければなりませんか?
ありがとうございます。dirent.hでseekdir()を見つけることができませんWindows(C++)

+0

あなたは* *ヘッダファイルの違い*と*ライブラリを勉強したいです。ヘッダーをダウンロードするだけでは不十分です。 – tofro

+0

もう少し説明できますか?私は小さなチュートリアルに従っていると私はdirent.hから関数を使用することができ、それらの関数は実際に動作します:/ – Freddykong

+0

それはヘッダーのみのライブラリなので、.hファイルが必要です。 'seekdir'は単に作者によって実装されていないようです。 – Ari0nhh

答えて

1

そのヘッダーで利用可能な唯一の機能は以下のとおりです。

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

必要な機能を得るために何のトリックはありません。あなたは単にこれのために別のライブラリを見つける必要があります。

1

enter image description here

あなたはヘッダファイルdirent.hを見つけカント場合は、代替としてWIN32_FIND_DATAFindFirstFile()FindNextFile()を使用してみてください。 2つの異なるコードが提出されます。 1つはVisual Studio 6.o用で、もう1つはVisual Studio 2013用で、ワイド文字を使用する必要があります。 Visual Studio 6.0のための

コード:Visual Studioの2013年

#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 
// 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

WRT "ワイド文字[、]"を使用する必要があります。Windowsでは、ワイド文字の場合は「W」、ANSIの場合は「A」接尾辞付きの2つの関数が用意されています。与えられた関数は 'W'バージョンを指すように定義されます。例えば。 'FindFirstFile'は' FindFirstFileW'に定義されています。 'FindFirstFileA'は直接またはどこかで呼び出すことができ、 'W'から 'A'にグローバルにリダイレクトするコンパイラオプションがあります。しかし、私がオプションを覚えていれば幸いです。 – user4581301

関連する問題