mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
update filename operations for Win32
This commit is contained in:
parent
75bc169384
commit
c67e0d260a
@ -42,6 +42,7 @@
|
|||||||
/* begin Win32-specific code */
|
/* begin Win32-specific code */
|
||||||
|
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
static string
|
static string
|
||||||
front_to_back_slash(const string &str) {
|
front_to_back_slash(const string &str) {
|
||||||
@ -489,6 +490,10 @@ set_extension(const string &s) {
|
|||||||
void Filename::
|
void Filename::
|
||||||
standardize() {
|
standardize() {
|
||||||
assert(!_filename.empty());
|
assert(!_filename.empty());
|
||||||
|
if (_filename == ".") {
|
||||||
|
// Don't change a single dot; this refers to the current directory.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
vector<string> components;
|
vector<string> components;
|
||||||
|
|
||||||
@ -693,14 +698,13 @@ exists() const {
|
|||||||
string os_specific = to_os_specific();
|
string os_specific = to_os_specific();
|
||||||
|
|
||||||
#ifdef WIN32_VC
|
#ifdef WIN32_VC
|
||||||
// Windows puts underscores in front of most of the function and
|
|
||||||
// structure names it borrowed from Unix. Embrace and extend.
|
|
||||||
struct _stat this_buf;
|
|
||||||
bool exists = false;
|
bool exists = false;
|
||||||
|
|
||||||
if (_stat(os_specific.c_str(), &this_buf) == 0) {
|
DWORD results = GetFileAttributes(os_specific.c_str());
|
||||||
|
if (results != -1) {
|
||||||
exists = true;
|
exists = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else // WIN32_VC
|
#else // WIN32_VC
|
||||||
struct stat this_buf;
|
struct stat this_buf;
|
||||||
bool exists = false;
|
bool exists = false;
|
||||||
@ -725,12 +729,13 @@ is_regular_file() const {
|
|||||||
string os_specific = to_os_specific();
|
string os_specific = to_os_specific();
|
||||||
|
|
||||||
#ifdef WIN32_VC
|
#ifdef WIN32_VC
|
||||||
struct _stat this_buf;
|
|
||||||
bool isreg = false;
|
bool isreg = false;
|
||||||
|
|
||||||
if (_stat(os_specific.c_str(), &this_buf) == 0) {
|
DWORD results = GetFileAttributes(os_specific.c_str());
|
||||||
isreg = (this_buf.st_mode & _S_IFREG) != 0;
|
if (results != -1) {
|
||||||
|
isreg = (results == FILE_ATTRIBUTE_NORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else // WIN32_VC
|
#else // WIN32_VC
|
||||||
struct stat this_buf;
|
struct stat this_buf;
|
||||||
bool isreg = false;
|
bool isreg = false;
|
||||||
@ -754,11 +759,11 @@ is_directory() const {
|
|||||||
string os_specific = to_os_specific();
|
string os_specific = to_os_specific();
|
||||||
|
|
||||||
#ifdef WIN32_VC
|
#ifdef WIN32_VC
|
||||||
struct _stat this_buf;
|
|
||||||
bool isdir = false;
|
bool isdir = false;
|
||||||
|
|
||||||
if (_stat(os_specific.c_str(), &this_buf) == 0) {
|
DWORD results = GetFileAttributes(os_specific.c_str());
|
||||||
isdir = (this_buf.st_mode & _S_IFDIR) != 0;
|
if (results != -1) {
|
||||||
|
isdir = (results & FILE_ATTRIBUTE_DIRECTORY) != 0;
|
||||||
}
|
}
|
||||||
#else // WIN32_VC
|
#else // WIN32_VC
|
||||||
struct stat this_buf;
|
struct stat this_buf;
|
||||||
@ -1066,8 +1071,40 @@ scan_directory(vector_string &contents) const {
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
#elif defined(WIN32_VC)
|
#elif defined(WIN32_VC)
|
||||||
return false;
|
// Use FindFirstFile()/FindNextFile() to walk through the list of
|
||||||
|
// files in a directory.
|
||||||
|
size_t orig_size = contents.size();
|
||||||
|
|
||||||
|
string match;
|
||||||
|
if (empty()) {
|
||||||
|
match = "*.*";
|
||||||
|
} else {
|
||||||
|
match = to_os_specific() + "\\*.*";
|
||||||
|
}
|
||||||
|
WIN32_FIND_DATA find_data;
|
||||||
|
|
||||||
|
HANDLE handle = FindFirstFile(match.c_str(), &find_data);
|
||||||
|
if (handle == INVALID_HANDLE_VALUE) {
|
||||||
|
if (GetLastError() == ERROR_NO_MORE_FILES) {
|
||||||
|
// No matching files is not an error.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
string filename = find_data.cFileName;
|
||||||
|
if (filename != "." && filename != "..") {
|
||||||
|
contents.push_back(filename);
|
||||||
|
}
|
||||||
|
} while (FindNextFile(handle, &find_data));
|
||||||
|
|
||||||
|
bool scan_ok = (GetLastError() == ERROR_NO_MORE_FILES);
|
||||||
|
FindClose(handle);
|
||||||
|
|
||||||
|
sort(contents.begin() + orig_size, contents.end());
|
||||||
|
return scan_ok;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
// Don't know how to scan directories!
|
// Don't know how to scan directories!
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user