190 lines
6.2 KiB
C#
190 lines
6.2 KiB
C#
|
/* 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;
|
||
|
}
|
||
|
}
|
||
|
}
|