windirectory.cpp
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // windirectory.cpp
  2. // 
  3. // Copyright (C) 2002, Chris Laurel <claurel@shatters.net>
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #include <iostream>
  10. #include <windows.h>
  11. #include "directory.h"
  12. using namespace std;
  13. class WindowsDirectory : public Directory
  14. {
  15. public:
  16.     WindowsDirectory(const std::string&);
  17.     virtual ~WindowsDirectory();
  18.     virtual bool nextFile(std::string&);
  19.     enum {
  20.         DirGood = 0,
  21.         DirBad = 1
  22.     };
  23. private:
  24.     string dirname;
  25.     string searchName;
  26.     int status;
  27.     HANDLE searchHandle;
  28. };
  29. WindowsDirectory::WindowsDirectory(const std::string& _dirname) :
  30.     dirname(_dirname),
  31.     status(DirGood),
  32.     searchHandle(INVALID_HANDLE_VALUE)
  33. {
  34.     searchName = dirname + string("\*");
  35.     // Check to make sure that this file is a directory
  36. }
  37. WindowsDirectory::~WindowsDirectory()
  38. {
  39.     if (searchHandle != INVALID_HANDLE_VALUE)
  40.         FindClose(searchHandle);
  41.     searchHandle = NULL;
  42. }
  43. bool WindowsDirectory::nextFile(std::string& filename)
  44. {
  45.     WIN32_FIND_DATAA findData;
  46.     if (status != DirGood)
  47.         return false;
  48.     if (searchHandle == INVALID_HANDLE_VALUE)
  49.     {
  50.         searchHandle = FindFirstFileA(const_cast<char*>(searchName.c_str()),
  51.                                       &findData);
  52.         if (searchHandle == INVALID_HANDLE_VALUE)
  53.         {
  54.             status = DirBad;
  55.             return false;
  56.         }
  57.         else
  58.         {
  59.             filename = findData.cFileName;
  60.             return true;
  61.         }
  62.     }
  63.     else
  64.     {
  65.         if (FindNextFileA(searchHandle, &findData))
  66.         {
  67.             filename = findData.cFileName;
  68.             return true;
  69.         }
  70.         else
  71.         {
  72.             status = DirBad;
  73.             return false;
  74.         }
  75.     }
  76. }
  77. Directory* OpenDirectory(const std::string& dirname)
  78. {
  79.     return new WindowsDirectory(dirname);
  80. }
  81. bool IsDirectory(const std::string& filename)
  82. {
  83.     DWORD attr = GetFileAttributesA(const_cast<char*>(filename.c_str()));
  84.     if (attr == 0xffffffff)
  85.         return false;
  86.     else
  87.         return ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0);
  88. }
  89. std::string WordExp(const std::string& filename) {
  90.     return filename;
  91. }