| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- //
- // DirectoryIterator_WIN32U.cpp
- //
- // $Id: //poco/1.4/Foundation/src/DirectoryIterator_WIN32U.cpp#1 $
- //
- // Library: Foundation
- // Package: Filesystem
- // Module: DirectoryIterator
- //
- // Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
- // and Contributors.
- //
- // SPDX-License-Identifier: BSL-1.0
- //
- #include "Poco/DirectoryIterator_WIN32U.h"
- #if defined(_WIN32_WCE)
- #include "Poco/File_WINCE.h"
- #else
- #include "Poco/File_WIN32U.h"
- #endif
- #include "Poco/Path.h"
- #include "Poco/UnicodeConverter.h"
- #include <cstring>
- namespace Poco {
- DirectoryIteratorImpl::DirectoryIteratorImpl(const std::string& path): _fh(INVALID_HANDLE_VALUE), _rc(1)
- {
- Path p(path);
- p.makeDirectory();
- std::string findPath = p.toString();
- findPath.append("*");
- std::wstring uFindPath;
- UnicodeConverter::toUTF16(findPath, uFindPath);
- _fh = FindFirstFileW(uFindPath.c_str(), &_fd);
- if (_fh == INVALID_HANDLE_VALUE)
- {
- if (GetLastError() != ERROR_NO_MORE_FILES)
- File::handleLastError(path);
- }
- else
- {
- UnicodeConverter::toUTF8(_fd.cFileName, _current);
- if (_current == "." || _current == "..")
- next();
- }
- }
- DirectoryIteratorImpl::~DirectoryIteratorImpl()
- {
- if (_fh != INVALID_HANDLE_VALUE)
- FindClose(_fh);
- }
- const std::string& DirectoryIteratorImpl::next()
- {
- do
- {
- _current.clear();
- if (FindNextFileW(_fh, &_fd) != 0)
- {
- UnicodeConverter::toUTF8(_fd.cFileName, _current);
- }
- }
- while (_current == "." || _current == "..");
- return _current;
- }
- } // namespace Poco
|