本文整理汇总了C++中PHYSFS_enumerateFiles函数的典型用法代码示例。如果您正苦于以下问题:C++ PHYSFS_enumerateFiles函数的具体用法?C++ PHYSFS_enumerateFiles怎么用?C++ PHYSFS_enumerateFiles使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PHYSFS_enumerateFiles函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: FS_Init
void FS_Init(const char *argv0) {
int err = PHYSFS_init(argv0);
if (err == 0) {
Con_Errorf(ERR_FATAL, "Error in PHYSFS_init: %s", PHYSFS_getErrorByCode(PHYSFS_getLastErrorCode()));
return;
}
const char *baseDir = PHYSFS_getBaseDir();
fs_basepath = Con_GetVarDefault("fs.basepath", baseDir, CONVAR_STARTUP);
fs_basegame = Con_GetVarDefault("fs.basegame", "base", CONVAR_STARTUP);
fs_game = Con_GetVarDefault("fs.game", DEFAULT_GAME, CONVAR_STARTUP);
bool modLoaded = fs_game->string[0] != '\0';
char **baseFiles, **gameFiles;
// get the file listing for the basegame dir, then immediately unmount
const char *fullBasePath = tempstr("%s/%s", fs_basepath->string, fs_basegame->string);
PHYSFS_mount(fullBasePath, "/", 1);
baseFiles = PHYSFS_enumerateFiles("/");
PHYSFS_removeFromSearchPath(fullBasePath);
// if fs_game is set, do the same thing for the fs_game dir
if (modLoaded) {
const char *fullGamePath = tempstr("%s/%s", fs_basepath->string, fs_game->string);
PHYSFS_mount(fullGamePath, "/", 1);
gameFiles = PHYSFS_enumerateFiles("/");
PHYSFS_removeFromSearchPath(fullGamePath);
// mount the mod dir first, then mount mod PK3s
PHYSFS_mount(tempstr("%s/%s", fs_basepath->string, fs_game->string), "/", 1);
FS_AddPaksFromList(gameFiles, fs_basepath->string, fs_game->string);
PHYSFS_freeList(gameFiles);
}
// then mount the base game dir, then the mount base game PK3s
PHYSFS_mount(tempstr("%s/%s", fs_basepath->string, fs_basegame->string), "/", 1);
FS_AddPaksFromList(baseFiles, fs_basepath->string, fs_basegame->string);
PHYSFS_freeList(baseFiles);
// print all the files we've found in order of priority
Con_Printf("Current filesystem search path:\n");
PHYSFS_getSearchPathCallback(printSearchPath, NULL);
Con_Printf("\n");
// add command handler for dir to view virtual filesystem
Con_AddCommand("dir", Cmd_Dir_f);
}
示例2: buildMapList
bool buildMapList(void)
{
char ** filelist, ** file;
size_t len;
if (!loadLevFile("gamedesc.lev", mod_campaign, false))
{
return false;
}
loadLevFile("addon.lev", mod_multiplay, false);
filelist = PHYSFS_enumerateFiles("");
for ( file = filelist; *file != NULL; ++file )
{
len = strlen( *file );
if ( len > 10 // Do not add addon.lev again
&& !strcasecmp( *file+(len-10), ".addon.lev") )
{
loadLevFile(*file, mod_multiplay, true);
}
// add support for X player maps using a new name to prevent conflicts.
if ( len > 13 && !strcasecmp( *file+(len-13), ".xplayers.lev") )
{
loadLevFile(*file, mod_multiplay, true);
}
}
PHYSFS_freeList( filelist );
return true;
}
示例3: file_getdirlist
static PHYSFSX_counted_list file_getdirlist(const char *dir)
{
ntstring<PATH_MAX - 1> path;
auto dlen = path.copy_if(dir);
if ((!dlen && dir[0] != '\0') || !path.copy_if(dlen, "/"))
return nullptr;
++ dlen;
PHYSFSX_counted_list list{PHYSFS_enumerateFiles(dir)};
if (!list)
return nullptr;
const auto predicate = [&](char *i) -> bool {
if (path.copy_if(dlen, i) && PHYSFS_isDirectory(path))
return false;
free(i);
return true;
};
auto j = std::remove_if(list.begin(), list.end(), predicate);
*j = NULL;
auto NumDirs = j.get() - list.get();
qsort(list.get(), NumDirs, sizeof(char *), string_array_sort_func);
if (*dir)
{
// Put the 'go to parent directory' sequence '..' first
++NumDirs;
auto r = reinterpret_cast<char **>(realloc(list.get(), sizeof(char *)*(NumDirs + 1)));
if (!r)
return list;
list.release();
list.reset(r);
std::move_backward(r, r + NumDirs, r + NumDirs + 1);
list[0] = d_strdup("..");
}
list.set_count(NumDirs);
return list;
}
示例4: PHYSFS_getDirSeparator
void
ResourceManager::searchAndAddArchives(const std::string &path,
const std::string &ext,
bool append)
{
const char *dirSep = PHYSFS_getDirSeparator();
char **list = PHYSFS_enumerateFiles(path.c_str());
for (char **i = list; *i != NULL; i++)
{
size_t len = strlen(*i);
if (len > ext.length() && !ext.compare((*i)+(len - ext.length())))
{
std::string file, realPath, archive;
file = path + (*i);
realPath = std::string(PHYSFS_getRealDir(file.c_str()));
archive = realPath + dirSep + file;
addToSearchPath(archive, append);
}
}
PHYSFS_freeList(list);
}
示例5: cmd_enumerate
static int cmd_enumerate(char *args)
{
char **rc;
if (*args == '\"')
{
args++;
args[strlen(args) - 1] = '\0';
} /* if */
rc = PHYSFS_enumerateFiles(args);
if (rc == NULL)
printf("Failure. reason: %s.\n", PHYSFS_getLastError());
else
{
int file_count;
char **i;
for (i = rc, file_count = 0; *i != NULL; i++, file_count++)
printf("%s\n", *i);
printf("\n total (%d) files.\n", file_count);
PHYSFS_freeList(rc);
} /* else */
return(1);
} /* cmd_enumerate */
示例6: glyph_width
Font::Font(GlyphWidth glyph_width_,
const std::string& filename,
int shadowsize_) :
glyph_width(glyph_width_),
glyph_surfaces(),
shadow_surfaces(),
char_height(),
shadowsize(shadowsize_),
glyphs(65536)
{
for(unsigned int i=0; i<65536;i++) glyphs[i].surface_idx = -1;
const std::string fontdir = FileSystem::dirname(filename);
const std::string fontname = FileSystem::basename(filename);
// scan for prefix-filename in addons search path
char **rc = PHYSFS_enumerateFiles(fontdir.c_str());
for (char **i = rc; *i != NULL; i++) {
std::string filename(*i);
if( filename.rfind(fontname) != std::string::npos ) {
loadFontFile(fontdir + filename);
}
}
PHYSFS_freeList(rc);
}
示例7: l_filesystem_enumerate
static int l_filesystem_enumerate(lua_State* state) {
int n = lua_gettop(state);
const char * dir = l_tools_toStringOrError(state, 1);
int error = PHYSFS_mount(dir, "/", 1);
if (error != 1)
return printf("%s %s %s \n", "Error: Directory or archive named : ", dir ," does not exist");
char **rc = PHYSFS_enumerateFiles("/");
char **i;
int index = 1;
if( n != 1 )
return luaL_error(state, "Function s a single parameter.");
lua_newtable(state);
for (i = rc; *i != 0; i++)
{
lua_pushinteger(state, index);
lua_pushstring(state, *i);
lua_settable(state, -3);
index++;
}
PHYSFS_freeList(rc);
return 1;
}
示例8: addSubdirs
/*!
* Tries to mount a list of directories, found in /basedir/subdir/<list>.
* \param basedir Base directory
* \param subdir A subdirectory of basedir
* \param appendToPath Whether to append or prepend
* \param checkList List of directories to check. NULL means any.
*/
void addSubdirs( const char * basedir, const char * subdir, const bool appendToPath, char * checkList[], bool addToModList )
{
char tmpstr[PATH_MAX];
char buf[256];
char ** subdirlist = PHYSFS_enumerateFiles( subdir );
char ** i = subdirlist;
while( *i != NULL )
{
#ifdef DEBUG
debug( LOG_NEVER, "addSubdirs: Examining subdir: [%s]", *i );
#endif // DEBUG
if (*i[0] != '.' && (!checkList || inList(checkList, *i)))
{
snprintf(tmpstr, sizeof(tmpstr), "%s%s%s%s", basedir, subdir, PHYSFS_getDirSeparator(), *i);
#ifdef DEBUG
debug( LOG_NEVER, "addSubdirs: Adding [%s] to search path", tmpstr );
#endif // DEBUG
if (addToModList)
{
addLoadedMod(*i);
snprintf(buf, sizeof(buf), "mod: %s", *i);
addDumpInfo(buf);
}
PHYSFS_addToSearchPath( tmpstr, appendToPath );
}
i++;
}
PHYSFS_freeList( subdirlist );
}
示例9: PHYSFS_enumerateFiles
/**Enumerates all files available in a path.
* \param path String pointing to the path
* \return Nonzero on success */
list<string> Filesystem::Enumerate( const string& path, const string &suffix )
{
list<string> files;
char **rc;
rc = PHYSFS_enumerateFiles(path.c_str());
if (rc == NULL){
LogMsg(ERR,"Failure to enumerate %s. reason: %s.\n",
path.c_str(),PHYSFS_getLastError());
}
else
{
int file_count;
char **i;
for (i = rc, file_count = 0; *i != NULL; i++, file_count++)
{
files.push_back( string(*i) );
}
LogMsg(INFO,"\n total (%d) files.\n", file_count);
PHYSFS_freeList(rc);
return 1;
}
return files;
}
示例10: PHYSFS_enumerateFiles
void MainMenu::fillLoadMenu( bool save /*= false*/ )
{
const std::string buttonNames[]={"File0","File1","File2","File3","File4","File5"};
char** rc = PHYSFS_enumerateFiles("/");
char* curfile;
CheckButton *button;
for(int i=0;i<6;i++) {
char* recentfile = NULL;
PHYSFS_sint64 t = 0;
std::stringstream filestart;
filestart << i+1 << "_";
if( save ){
button = getCheckButton(*saveGameMenu.get(),buttonNames[i]);
} else {
button = getCheckButton(*loadGameMenu.get(),buttonNames[i]);
}
//make sure Button is connected only once
button->clicked.clear();
if( save )
button->clicked.connect(makeCallback(*this,&MainMenu::selectSaveGameButtonClicked));
else {
button->clicked.connect(makeCallback(*this,&MainMenu::selectLoadGameButtonClicked));
}
for(char** i = rc; *i != 0; i++){
curfile = *i;
if(std::string( curfile ).find( filestart.str() ) == 0 ) {
// && !( curfile->d_type & DT_DIR ) ) is not portable. So
// don't create a directoy named 2_ in a savegame-directory or
// you can no longer load from slot 2.
if (t == 0) {
recentfile = curfile;
t = PHYSFS_getLastModTime(recentfile);
} else {
if (PHYSFS_getLastModTime(curfile) > t) {
/*#ifdef DEBUG
fprintf(stderr," %s is more recent than previous %s\n",
curfile, recentfile);
#endif*/
recentfile = curfile;
t = PHYSFS_getLastModTime(recentfile);
}
}
}
}
#ifdef DEBUG
fprintf(stderr,"Most recent file: %s\n\n",recentfile);
#endif
if(t != 0) {
std::string f= recentfile;
button->setCaptionText(f);
} else {
button->setCaptionText(_("empty"));
}
}
}
示例11: WzConfigHack
WzConfig::WzConfig(const QString &name, WzConfig::warning warning, QObject *parent)
: WzConfigHack(name, (int)warning), m_settings(QString("wz::") + name, QSettings::IniFormat, parent), m_overrides()
{
if (m_settings.status() != QSettings::NoError && (warning != ReadOnly || PHYSFS_exists(name.toUtf8().constData())))
{
debug(LOG_FATAL, "Could not open \"%s\"", name.toUtf8().constData());
}
char **diffList = PHYSFS_enumerateFiles("diffs");
char **i;
int j;
for (i = diffList; *i != NULL; i++)
{
std::string str(std::string("diffs/") + *i + std::string("/") + name.toUtf8().constData());
if (!PHYSFS_exists(str.c_str()))
continue;
QSettings tmp(QString("wz::") + str.c_str(), QSettings::IniFormat);
if (tmp.status() != QSettings::NoError)
{
debug(LOG_FATAL, "Could not read an override for \"%s\"", name.toUtf8().constData());
}
QStringList keys(tmp.allKeys());
for (j = 0; j < keys.length(); j++)
{
m_overrides.insert(keys[j],tmp.value(keys[j]));
}
}
PHYSFS_freeList(diffList);
}
示例12: getGameView
void Game::testAllHelpFiles(){
getGameView()->printStatusMessage( "Testing Help Files...");
std::string filename;
std::string directory = "help/en";
std::string fullname;
char **rc = PHYSFS_enumerateFiles( directory.c_str() );
char **i;
size_t pos;
for (i = rc; *i != NULL; i++) {
fullname = directory;
fullname.append( *i );
filename.assign( *i );
if(PHYSFS_isDirectory(fullname.c_str()))
continue;
pos = filename.rfind( ".xml" );
if( pos != std::string::npos ){
filename.replace( pos, 4 ,"");
std::cerr << "--- Examining " << filename << "\n";
helpWindow->showTopic( filename );
std::cerr << "\n";
}
}
PHYSFS_freeList(rc);
}
示例13: decltype
std::string
AddonManager::scan_for_info(const std::string& archive_os_path) const
{
std::unique_ptr<char*, decltype(&PHYSFS_freeList)>
rc2(PHYSFS_enumerateFiles("/"),
PHYSFS_freeList);
for(char** j = rc2.get(); *j != 0; ++j)
{
if (has_suffix(*j, ".nfo"))
{
std::string nfo_filename = FileSystem::join("/", *j);
// make sure it's in the current archive_os_path
const char* realdir = PHYSFS_getRealDir(nfo_filename.c_str());
if (!realdir)
{
log_warning << "PHYSFS_getRealDir() failed for " << nfo_filename << ": " << PHYSFS_getLastError() << std::endl;
}
else
{
if (realdir == archive_os_path)
{
return nfo_filename;
}
}
}
}
return std::string();
}
示例14: removeSubdirs
void removeSubdirs( const char * basedir, const char * subdir, char * checkList[] )
{
char tmpstr[PATH_MAX];
char ** subdirlist = PHYSFS_enumerateFiles( subdir );
char ** i = subdirlist;
while( *i != NULL )
{
#ifdef DEBUG
debug( LOG_NEVER, "removeSubdirs: Examining subdir: [%s]", *i );
#endif // DEBUG
if( !checkList || inList( checkList, *i ) )
{
snprintf(tmpstr, sizeof(tmpstr), "%s%s%s%s", basedir, subdir, PHYSFS_getDirSeparator(), *i);
#ifdef DEBUG
debug( LOG_NEVER, "removeSubdirs: Removing [%s] from search path", tmpstr );
#endif // DEBUG
if (!PHYSFS_removeFromSearchPath( tmpstr ))
{
#ifdef DEBUG // spams a ton!
debug(LOG_NEVER, "Couldn't remove %s from search path because %s", tmpstr, PHYSFS_getLastError());
#endif // DEBUG
}
}
i++;
}
PHYSFS_freeList( subdirlist );
}
示例15: mLeftPlayer
ReplayMenuState::ReplayMenuState() :
mLeftPlayer(LEFT_PLAYER),
mRightPlayer(RIGHT_PLAYER)
{
IMGUI::getSingleton().resetSelection();
mReplaying = false;
mChecksumError = false;
mReplayMatch = 0;
mReplayRecorder = 0;
mSelectedReplay = 0;
char** filenames = PHYSFS_enumerateFiles("replays");
for (int i = 0; filenames[i] != 0; ++i)
{
std::string tmp(filenames[i]);
if (tmp.find(".bvr") != std::string::npos)
{
mReplayFiles.push_back(std::string(tmp.begin(), tmp.end()-4));
}
}
if (mReplayFiles.size() == 0)
mSelectedReplay = -1;
std::sort(mReplayFiles.rbegin(), mReplayFiles.rend());
mLeftPlayer.loadFromConfig("left");
mRightPlayer.loadFromConfig("right");
}