123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- /* PhysFS.cs - (c)2003 Gregory S. Read
- * Provides access to PhysFS API calls not specific to file handle access.
- */
- using System;
- namespace PhysFS_NET
- {
- public class PhysFS
- {
- /* Initialize
- * Inits the PhysFS API. This normally does not need to be called unless
- * the API has been manually deinitialized since the PhysFS_DLL class
- * initializes just before the first call is made into the DLL.
- * Parameters
- * none
- * Returns
- * none
- * Exceptions
- * PhysFSException - An error occured in the PhysFS API
- */
- public static void Initialize()
- {
- // Initialize the physfs library, raise an exception if error
- if(PhysFS_DLL.PHYSFS_init("") == 0)
- throw new PhysFSException();
- }
- /* Deinitialize
- * Deinits the PhysFS API. It is recommended that this method be called
- * by the application before exiting in order to gracefully deallocate
- * resources and close all filehandles, etc.
- * Parameters
- * none
- * Returns
- * none
- * Exceptions
- * PhysFSException - An error occured in the PhysFS API
- */
- public static void Deinitialize()
- {
- // Deinit, raise an exception if an error occured
- if(PhysFS_DLL.PHYSFS_deinit() == 0)
- throw new PhysFSException();
- }
- /* BaseDir
- * Gets the base directory configured for PhysFS. See the PhysFS API
- * documentation for more information.
- * Parameters
- * none
- * Returns
- * A string value representing the Base Directory
- * Exceptions
- * none
- */
- public static string BaseDir
- {
- get
- {
- // Return the current base directory
- return PhysFS_DLL.PHYSFS_getBaseDir();
- }
- }
- /* WriteDir
- * Gets or sets the write directory configured for PhysFS. See the PhysFS API
- * documentation for more information.
- * Parameters
- * set - Path to set the WriteDir property to
- * Returns
- * A string value representing the Write Directory
- * Exceptions
- * PhysFSException - An error occured in the PhysFS API when
- * settings the write directory.
- */
- public static string WriteDir
- {
- get
- {
- // Return the current write directory
- return PhysFS_DLL.PHYSFS_getWriteDir();
- }
- set
- {
- // Set the write directory and raise an exception if an error occured
- if(PhysFS_DLL.PHYSFS_setWriteDir(value) == 0)
- throw new PhysFSException();
- }
- }
- /* UserDir
- * Gets or sets the write directory configured for PhysFS. See the PhysFS API
- * documentation for more information.
- * Parameters
- * set - Path to set the WriteDir property to
- * Returns
- * A string value representing the Write Directory
- * Exceptions
- * PhysFSException - An error occured in the PhysFS API when
- * settings the write directory.
- */
- public static string UserDir
- {
- get
- {
- // Return the current user directory
- return PhysFS_DLL.PHYSFS_getUserDir();
- }
- }
- public static void AddToSearchPath(string NewDir, bool Append)
- {
- if(PhysFS_DLL.PHYSFS_addToSearchPath(NewDir, Append?1:0) == 0)
- throw new PhysFSException();
- }
- public static void RemoveFromSearchPath(string OldDir)
- {
- if(PhysFS_DLL.PHYSFS_removeFromSearchPath(OldDir) == 0)
- throw new PhysFSException();
- }
- public unsafe static string[] GetSearchPath()
- {
- byte** p; // Searchpath list from PhysFS dll
- string[] pathlist; // List converted to an array
- // Get the CDROM drive listing
- p = PhysFS_DLL.PHYSFS_getSearchPath();
- // Convert the C-style array to a .NET style array
- pathlist = PhysFS_DLL.BytePPToArray(p);
- // Free the original list since we're done with it
- PhysFS_DLL.PHYSFS_freeList(p);
- return pathlist;
- }
- public unsafe static string[] GetCDROMDrives()
- {
- byte** p; // CDROM list from PhysFS dll
- string[] cdromlist; // List converted to an array
- // Get the CDROM drive listing
- p = PhysFS_DLL.PHYSFS_getCdRomDirs();
- // Convert the C-style array to a .NET style array
- cdromlist = PhysFS_DLL.BytePPToArray(p);
- // Free the original list since we're done with it
- PhysFS_DLL.PHYSFS_freeList(p);
- return cdromlist;
- }
- public static void MkDir(string Dirname)
- {
- if(PhysFS_DLL.PHYSFS_mkdir(Dirname) == 0)
- throw new PhysFSException();
- }
- public static void Delete(string Filename)
- {
- if(PhysFS_DLL.PHYSFS_delete(Filename) == 0)
- throw new PhysFSException();
- }
- public static string GetRealDir(string Filename)
- {
- string RetValue;
- RetValue = PhysFS_DLL.PHYSFS_getRealDir(Filename);
- if(RetValue == null)
- throw new PhysFSException("File not found in search path.");
- // Return the real file path of the specified filename
- return RetValue;
- }
- public unsafe static string[] EnumerateFiles(string Dirname)
- {
- byte** p; // File list from PhysFS dll
- string[] filelist; // List converted to an array
- // Get the CDROM drive listing
- p = PhysFS_DLL.PHYSFS_enumerateFiles(Dirname);
- // Convert the C-style array to a .NET style array
- filelist = PhysFS_DLL.BytePPToArray(p);
- // Free the original list since we're done with it
- PhysFS_DLL.PHYSFS_freeList(p);
- return filelist;
- }
- public static bool IsDirectory(string Filename)
- {
- // Return true if non-zero, otherwise return false
- return (PhysFS_DLL.PHYSFS_isDirectory(Filename) == 0)?false:true;
- }
- }
- }
|