⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileutils.cpp

📁 SYMBIAN GPS NMEA协议实现
💻 CPP
字号:
/************************************************************************/
/* Bluetooth Test      			The.Berlin.Factor   		April 2003	*/
/************************************************************************/

#include <EikApp.h>
#include <EikAppUi.h>
#include <EikEnv.h>
#include <S32File.h>

#include "util/FileUtils.h"



void NFileUtils::MkDirL( const TDesC & aFileName ) {

	RFs fs;
	User::LeaveIfError( fs.Connect( ) );
	CleanupClosePushL( fs );

	User::LeaveIfError( fs.MkDir( aFileName ) );

	CleanupStack::PopAndDestroy( &fs );

}



void NFileUtils::MkDirL( const TDesC & aFileName, TBool aIgnoreExisting ) {

	TRAPD( error, MkDirL( aFileName ) );
	if ( error == KErrNone )
		return;

	if ( error == KErrAlreadyExists && aIgnoreExisting )
		return;

	User::Leave( error );

}



void NFileUtils::DeleteFileL( const TDesC & aFileName ) {

	RFs fs;
	User::LeaveIfError( fs.Connect( ) );
	CleanupClosePushL( fs );

	User::LeaveIfError( fs.Delete( aFileName ) );

	CleanupStack::PopAndDestroy( &fs );

}



void NFileUtils::SaveFileL( const TDesC & aFileName, const TDesC8 & aDataBuffer ) {

	RFs fs;
	User::LeaveIfError( fs.Connect( ) );
	CleanupClosePushL( fs );

	RFileBuf fileBuf;
	if ( fileBuf.Open( fs, aFileName, EFileWrite ) != KErrNone )
		User::LeaveIfError( fileBuf.Replace( fs, aFileName, EFileWrite ) );

	CleanupClosePushL( fileBuf );

	fileBuf.SetSizeL( 0 );

	if ( aDataBuffer.Length( ) > 0 )
		fileBuf.WriteL( aDataBuffer.Ptr( ), aDataBuffer.Length( ) );

	CleanupStack::PopAndDestroy( &fileBuf );
	CleanupStack::PopAndDestroy( &fs );

}



void NFileUtils::SaveAppFileL( const TDesC & aRelativeFileName, const TDesC8 & aDataBuffer ) {

	TParsePtrC parse( CEikonEnv::Static( )->EikAppUi( )->Application( )->AppFullName( ) );

	TPtrC appPath = parse.DriveAndPath( );

	TFileName name = appPath;
	name.Append( aRelativeFileName );

	SaveFileL( name, aDataBuffer );

}



HBufC8 * NFileUtils::LoadFileL( const TDesC16 & aInputFileName ) {

	RFs fs;
	User::LeaveIfError( fs.Connect( ) );
	CleanupClosePushL( fs );

	// Open the data file
	RFile file;
	User::LeaveIfError( file.Open( fs, aInputFileName, EFileShareReadersOnly ) );
	CleanupClosePushL( file );
	
	// Get its size
	TInt size = 0;
	User::LeaveIfError( file.Size( size ) );

	// Allocate memory for the file contents
	HBufC8 * data = HBufC8::NewLC( size );
	TPtr8 ptr( data->Des( ) );
	User::LeaveIfError( file.Read( ptr ) );

	CleanupStack::Pop( data );

	CleanupStack::PopAndDestroy( &file );
	CleanupStack::PopAndDestroy( &fs );

	return( data );

}



HBufC8 * NFileUtils::LoadFileL( const TDesC8 & aInputFileName ) {

	// TODO: Evtl NStringUtils an den Start bringen? Oder evtl einen
	// TDesFakeC16 an den Start bringen der auf einem TDesC8 abgeht?

	TBuf< 256 > temp;
	temp.Copy( aInputFileName );
	return( LoadFileL( temp ) );

}



HBufC8 * NFileUtils::LoadAppFileL( const TDesC16 & aRelativeFileName ) {

	TParsePtrC parse( CEikonEnv::Static( )->EikAppUi( )->Application( )->AppFullName( ) );

	TPtrC appPath = parse.DriveAndPath( );

	TFileName name = appPath;
	name.Append( aRelativeFileName );

	HBufC8 * data = LoadFileL( name );

	return( data );

}



HBufC8 * NFileUtils::LoadAppFileL( const TDesC8 & aRelativeFileName ) {

	// TODO: Evtl NStringUtils an den Start bringen? Oder evtl einen
	// TDesFakeC16 an den Start bringen der auf einem TDesC8 abgeht?

	TBuf< 256 > temp;
	temp.Copy( aRelativeFileName );
	return( LoadAppFileL( temp ) );

}



TInt NFileUtils::GetFileSizeL( const TDesC & aFileName ) {

	RFs fs;
	User::LeaveIfError( fs.Connect( ) );
	CleanupClosePushL( fs );

	RFile file;
	User::LeaveIfError( file.Open( fs, aFileName, EFileRead ) );
	CleanupClosePushL( file );

	TInt fileSize = 0;
	User::LeaveIfError( file.Size( fileSize ) );

	CleanupStack::PopAndDestroy( &file );
	CleanupStack::PopAndDestroy( &fs );

	return( fileSize );

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -