Implement FILEMAN:Copy(string fromPath, string toPath)
Copies a file from `fromPath` to `toPath`. Returns `true` if the file was copied successfully.
This commit is contained in:
@@ -1592,6 +1592,7 @@
|
|||||||
<Function name='destroy'/>
|
<Function name='destroy'/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name='RageFileManager'>
|
<Class name='RageFileManager'>
|
||||||
|
<Function name='Copy'/>
|
||||||
<Function name='DoesFileExist'/>
|
<Function name='DoesFileExist'/>
|
||||||
<Function name='GetDirListing'/>
|
<Function name='GetDirListing'/>
|
||||||
<Function name='GetFileSizeBytes'/>
|
<Function name='GetFileSizeBytes'/>
|
||||||
|
|||||||
@@ -4848,6 +4848,10 @@ prev_note_name, succeeded = options:NoteSkin("cel")
|
|||||||
<Description>
|
<Description>
|
||||||
This singleton is accessible to Lua via <code>FILEMAN</code>.
|
This singleton is accessible to Lua via <code>FILEMAN</code>.
|
||||||
</Description>
|
</Description>
|
||||||
|
<Function name='Copy' return='bool' arguments='string fromPath, string toPath'>
|
||||||
|
Copies a file from <code>fromPath</code> to <code>toPath</code>.
|
||||||
|
Returns <code>true</code> if the file was copied successfully.
|
||||||
|
</Function>
|
||||||
<Function name='DoesFileExist' return='bool' arguments='string sPath'>
|
<Function name='DoesFileExist' return='bool' arguments='string sPath'>
|
||||||
Returns <code>true</code> if a file exists at <code>sPath</code>.
|
Returns <code>true</code> if a file exists at <code>sPath</code>.
|
||||||
</Function>
|
</Function>
|
||||||
|
|||||||
+39
-7
@@ -575,23 +575,23 @@ void RageFileManager::GetDirListingWithMultipleExtensions( const RString &sPath,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Files may only be moved within the same file driver. */
|
/* Files may only be moved within the same file driver. */
|
||||||
bool RageFileManager::Move( const RString &sOldPath_, const RString &sNewPath_ )
|
bool RageFileManager::Move( const RString &fromPath_, const RString &toPath_ )
|
||||||
{
|
{
|
||||||
RString sOldPath = sOldPath_;
|
RString fromPath = fromPath_;
|
||||||
RString sNewPath = sNewPath_;
|
RString toPath = toPath_;
|
||||||
|
|
||||||
vector<LoadedDriver *> aDriverList;
|
vector<LoadedDriver *> aDriverList;
|
||||||
ReferenceAllDrivers( aDriverList );
|
ReferenceAllDrivers( aDriverList );
|
||||||
|
|
||||||
NormalizePath( sOldPath );
|
NormalizePath( fromPath );
|
||||||
NormalizePath( sNewPath );
|
NormalizePath( toPath );
|
||||||
|
|
||||||
/* Multiple drivers may have the same file. */
|
/* Multiple drivers may have the same file. */
|
||||||
bool Deleted = false;
|
bool Deleted = false;
|
||||||
for( unsigned i = 0; i < aDriverList.size(); ++i )
|
for( unsigned i = 0; i < aDriverList.size(); ++i )
|
||||||
{
|
{
|
||||||
const RString sOldDriverPath = aDriverList[i]->GetPath( sOldPath );
|
const RString sOldDriverPath = aDriverList[i]->GetPath( fromPath );
|
||||||
const RString sNewDriverPath = aDriverList[i]->GetPath( sNewPath );
|
const RString sNewDriverPath = aDriverList[i]->GetPath( toPath );
|
||||||
if( sOldDriverPath.size() == 0 || sNewDriverPath.size() == 0 )
|
if( sOldDriverPath.size() == 0 || sNewDriverPath.size() == 0 )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -605,6 +605,36 @@ bool RageFileManager::Move( const RString &sOldPath_, const RString &sNewPath_ )
|
|||||||
return Deleted;
|
return Deleted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RageFileManager::Copy(const std::string &fromPath, const std::string &toPath)
|
||||||
|
{
|
||||||
|
RageFile fromFile, toFile;
|
||||||
|
|
||||||
|
if (!fromFile.Open(fromPath, RageFile::READ))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!toFile.Open(toPath, RageFile::WRITE))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
char buf[4096];
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
int readBytes = fromFile.Read(buf, sizeof(buf));
|
||||||
|
if (readBytes <= 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
int writtenBytes = toFile.Write(buf, readBytes);
|
||||||
|
if (writtenBytes != readBytes)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!fromFile.GetError().empty() || !toFile.GetError().empty())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool RageFileManager::Remove( const RString &sPath_ )
|
bool RageFileManager::Remove( const RString &sPath_ )
|
||||||
{
|
{
|
||||||
RString sPath = sPath_;
|
RString sPath = sPath_;
|
||||||
@@ -1247,6 +1277,7 @@ unsigned int GetHashForDirectory( const RString &sDir )
|
|||||||
class LunaRageFileManager: public Luna<RageFileManager>
|
class LunaRageFileManager: public Luna<RageFileManager>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
static int Copy(T* p, lua_State *L){ lua_pushboolean(L, p->Copy(SArg(1), SArg(2))); return 1; }
|
||||||
static int DoesFileExist( T* p, lua_State *L ){ lua_pushboolean( L, p->DoesFileExist(SArg(1)) ); return 1; }
|
static int DoesFileExist( T* p, lua_State *L ){ lua_pushboolean( L, p->DoesFileExist(SArg(1)) ); return 1; }
|
||||||
static int GetFileSizeBytes( T* p, lua_State *L ){ lua_pushnumber( L, p->GetFileSizeInBytes(SArg(1)) ); return 1; }
|
static int GetFileSizeBytes( T* p, lua_State *L ){ lua_pushnumber( L, p->GetFileSizeInBytes(SArg(1)) ); return 1; }
|
||||||
static int GetHashForFile( T* p, lua_State *L ){ lua_pushnumber( L, p->GetFileHash(SArg(1)) ); return 1; }
|
static int GetHashForFile( T* p, lua_State *L ){ lua_pushnumber( L, p->GetFileHash(SArg(1)) ); return 1; }
|
||||||
@@ -1301,6 +1332,7 @@ public:
|
|||||||
|
|
||||||
LunaRageFileManager()
|
LunaRageFileManager()
|
||||||
{
|
{
|
||||||
|
ADD_METHOD( Copy );
|
||||||
ADD_METHOD( DoesFileExist );
|
ADD_METHOD( DoesFileExist );
|
||||||
ADD_METHOD( GetFileSizeBytes );
|
ADD_METHOD( GetFileSizeBytes );
|
||||||
ADD_METHOD( GetHashForFile );
|
ADD_METHOD( GetHashForFile );
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ public:
|
|||||||
void GetDirListingWithMultipleExtensions(const RString &sPath,
|
void GetDirListingWithMultipleExtensions(const RString &sPath,
|
||||||
vector<RString> const& ExtensionList, vector<RString> &AddTo,
|
vector<RString> const& ExtensionList, vector<RString> &AddTo,
|
||||||
bool bOnlyDirs= false, bool bReturnPathToo= false);
|
bool bOnlyDirs= false, bool bReturnPathToo= false);
|
||||||
bool Move( const RString &sOldPath, const RString &sNewPath );
|
bool Move( const RString &fromPath, const RString &toPath );
|
||||||
|
bool Copy( const std::string &fromPath, const std::string &toPath );
|
||||||
bool Remove( const RString &sPath );
|
bool Remove( const RString &sPath );
|
||||||
bool DeleteRecursive( const RString &sPath );
|
bool DeleteRecursive( const RString &sPath );
|
||||||
void CreateDir( const RString &sDir );
|
void CreateDir( const RString &sDir );
|
||||||
|
|||||||
Reference in New Issue
Block a user