IFileSystem: Difference between revisions
(→Mount [[:Category:Steam Applications|Steam Application]] Content: testing...see talk page) |
|||
Line 88: | Line 88: | ||
The following code segment should be added to both <code>CHLClient::Init</code> in src\cl_dll\cdll_client_int.cpp and <code>CServerGameDLL::DLLInit</code> in src\dlls\GameInterface.cpp after <code>filesystem</code> is initialized. | The following code segment should be added to both <code>CHLClient::Init</code> in src\cl_dll\cdll_client_int.cpp and <code>CServerGameDLL::DLLInit</code> in src\dlls\GameInterface.cpp after <code>filesystem</code> is initialized. | ||
filesystem->AddSearchPath("'''path'''", "GAME"); | filesystem->AddSearchPath("'''path'''", "GAME"); | ||
if(filesystem->MountSteamContent('''id''')==FILESYSTEM_MOUNT_FAILED) | <font color="blue">if</font>(filesystem->MountSteamContent('''id''')==FILESYSTEM_MOUNT_FAILED) | ||
return false; | <font color="blue">return false</font>; | ||
'''<tt>path</tt>''' should be retrieved from [[Game Name Abbreviations]] | '''<tt>path</tt>''' should be retrieved from [[Game Name Abbreviations]] | ||
Revision as of 20:30, 4 May 2006
Here you will find all the information you ever wanted to know about the File System in Source. How to open files, how to read files, how to create new directories and how to find a file on the local system.
My Game Directory
This does not deal specifically with the filesystem, but you might find this useful for your project.
//Server char * pGameDir = new char[1024]; engine->GetGameDir(pGameDir, 1024); //Client const char *pGameDir = engine->GetGameDirectory();
Create Directory
To create a directory you need to know two things; the relative path containing the new directory name and Path ID where the path will be created — called a Path ID because it does not appear to be possible to create a directory using anything other than a search path id.
Default Path Ids
DEFAULT_WRITE_PATH
MOD
GAME
GAMEBIN
char * relpath = new char[1024]; Q_snprintf(relpath, 1024, "stuff\\%s", "newdirectory"); filesystem->CreateDirHierarchy( path, "MOD" );
This code will create a newdirectory
in your stuff
directory, which if does not exist will be created along with newdirectory
inside of your MOD directory.
File I/O
I/O Modes
r |
Open a text file for reading |
w |
Create a text file for writing |
a |
Append to a text file |
rb |
Open a binary file for reading |
wb |
Open a binary file for writing |
ab |
Append to a binary file |
r+ |
Open a text file for read/write |
w+ |
Create a text file for read/write |
a+ |
Append to or create a text file for read/write |
rb+ |
Open a binary file for read/write |
wb+ |
Create a binary file for read/write |
ab+ |
Append to or create a binary file for read/write |
FileHandle_t fh; fh = filesystem->Open( "mylog.log", "a", "MOD"); if (fh) { filesystem->FPrintf(fh, "%s", "Logging A Test Line..."); filesystem->Close(fh); }
So in this example we open mylog.log
in Append mode. Then we print the line Logging A Test Line...
and close the file.
Search Files
To iterate through a list of files in a given Path ID you would do the following.
FileFindHandle_t findHandle; const char *pFilename = filesystem->FindFirstEx( "*.*", "MOD", &findHandle ); while ( pFilename != NULL ) { pFilename = filesystem->FindNext( findHandle ); } filesystem->FindClose( findHandle );
*.*
is the wildcard to match the files against. "MOD"
is the Path ID.
The value in pFilename
for each filesystem->FindNext
is nothing but the file name (i.e. for maps/d1_trainstation_01.bsp
, pFilename
would be d1_trainstation_01
)
Mount Steam Application Content
The following code segment should be added to both CHLClient::Init
in src\cl_dll\cdll_client_int.cpp and CServerGameDLL::DLLInit
in src\dlls\GameInterface.cpp after filesystem
is initialized.
filesystem->AddSearchPath("path", "GAME"); if(filesystem->MountSteamContent(id)==FILESYSTEM_MOUNT_FAILED) return false;
path should be retrieved from Game Name Abbreviations
id should be retrieved from Steam Application IDs