int CKTVSaver::WriteConfig( CString strConfigFilePath, KTV_SONG_EX* lpSongRecord )
{
DWORD dwIndexAddress = 0;
SongConfigData *lpSCD = NULL; int nFileType = 0;
int HasEncodeFile = 0;
BOOL isNewFormat = TRUE;
BOOL bCreatingNew = FALSE;
UINT nOpenFlag = CFile::modeReadWrite;
DWORD dwAttr = -1;// GetFileAttributes(strConfigFilePath);
if( strConfigFilePath.IsEmpty() || ( dwAttr = GetFileAttributes(strConfigFilePath) ) == -1 ) {
bCreatingNew = TRUE;
isNewFormat = TRUE;
nOpenFlag = CFile::modeCreate | CFile::modeReadWrite;
}
else {
bCreatingNew = FALSE;
nOpenFlag = CFile::modeReadWrite;
} if( !strConfigFilePath.IsEmpty() && dwAttr != -1 && dwAttr & FILE_ATTRIBUTE_READONLY )
{
SetFileAttributes( strConfigFilePath, FILE_ATTRIBUTE_NORMAL );
}
CFile cf;
HANDLE hFile = NULL;
BOOL bOpenSCD = FALSE;
if( !strConfigFilePath.IsEmpty() )
bOpenSCD = cf.Open( strConfigFilePath, nOpenFlag ); //if( cf.Open( strConfigFilePath, nOpenFlag ) )
{
if( bOpenSCD )
{
hFile = cf.m_hFile;
DWORD dwSize = (DWORD)cf.GetLength();
if( bCreatingNew )
{
dwSize = (DWORD)sizeof(SongConfigData);
}
else
{
if ( dwSize == 512 )
{
dwSize = (DWORD)sizeof(SongConfigData);
isNewFormat = FALSE;
}
else
{
isNewFormat = TRUE;
}
} } // bOpenSCD
SongConfigData scd = {0}; if( bOpenSCD )
cf.Read( &scd, sizeof(scd) ); memset( scd.copyright.szCopyRight, 0, 8 );
strcat( scd.copyright.szCopyRight, "SYSDKTV" );
scd.copyright.dwCreatedDate = (DWORD)time(NULL);
scd.copyright.dwFileSize = (DWORD)sizeof(SongConfigData);
scd.copyright.dwRecordCount = 1;
scd.copyright.dwVersion = DB_SONG_CONFIG;
if ( !isNewFormat)
{
memset( &scd.songEx, 0, sizeof(KTV_SONG_EX) );
} if ( lpSongRecord )
//memcpy( &scd.song, &lpSongRecord->song, sizeof(KTV_SONG_S) );
wmemcpy( scd.Singer_name, lpSongRecord->Singer_name, 100 ); memcpy( &scd.songEx, lpSongRecord, sizeof(KTV_SONG_EX) );
ChangeSongDataFormat( &scd.song, lpSongRecord, FALSE ); }
else {
// 新数据格式 UINT nLength = m_strSongName.GetLength();
if( nLength > 0 )
{
nLength = nLength < 19 ? nLength : 19 ;
wmemset( scd.song.song_name, 0, 20 );
wmemcpy( scd.song.song_name, m_strSongName.GetBuffer(), nLength );
} // pinyin
nLength = m_strPinyin.GetLength();
if( nLength > 0 )
{
nLength = nLength < 9 ? nLength : 9 ;
wmemset( scd.song.song_py, 0, 10 );
wmemcpy( scd.song.song_py, m_strPinyin.GetBuffer(), nLength );
} // song number
scd.song.song_Num = m_dwNumber; nLength = m_strSingerName.GetLength();
if( nLength > 0 )
{
nLength = nLength < 99 ? nLength : 99 ;
wmemset( scd.Singer_name, 0, 100 );
wmemcpy( scd.Singer_name, m_strSingerName.GetBuffer(), nLength );
} // scd.song.Singer_Num[0] = m_dwSingerNo; memcpy( &scd.song.song_mtv, &m_nIsMTV, 1 ); memcpy( &scd.song.song_Lang, &m_nLang, 1 ); memcpy( &scd.song.song_Category, &m_nType, 1 ); memcpy( &scd.song.song_Volume, &m_nVolume, 1 ); memcpy( &scd.song.song_click, &m_nClick, 2 ); memcpy( &scd.song.song_Accompaniment, &m_nTrack, 1 ); } // if ( m_nIsMidi )
{
scd.song.filetype = IPTV_FILE_TYPE_MIDI;
scd.songEx.song.filetype = IPTV_FILE_TYPE_MIDI;
scd.song.song_Index = 0;
}
else if( !m_strFilePath.IsEmpty() )
{
//if( nFileType == 0 )
// nFileType = GetFileType( m_strFilePath ); //memcpy( &scd.song.filetype , &nFileType, 1 );
//memcpy( &scd.songEx.song.filetype , &nFileType, 1 );
} //////////////////////////////////////////////////////////////////////////
// 新格式 if ( !isNewFormat )
{
UINT nLength = m_strSongName.GetLength();
if( nLength > 0 )
{
nLength = nLength < SONG_NAME_MAX_LENGTH-1 ? nLength : SONG_NAME_MAX_LENGTH-1 ;
wmemset( scd.songEx.song_name, 0, SONG_NAME_MAX_LENGTH );
wmemcpy( scd.songEx.song_name, m_strSongName.GetBuffer(), nLength );
}
else
{
wmemcpy( scd.songEx.song_name, scd.song.song_name, 20 );
} nLength = m_strSingerName.GetLength();
if( nLength > 0 )
{
nLength = nLength < SINGER_NAME_MAX_LENGTH-1 ? nLength : SINGER_NAME_MAX_LENGTH-1 ;
wmemset( scd.Singer_name, 0, 100 );
wmemcpy( scd.Singer_name, m_strSingerName.GetBuffer(), nLength );
}
else
{
wmemset( scd.songEx.Singer_name, 0, SINGER_NAME_MAX_LENGTH );
wmemcpy( scd.songEx.Singer_name, scd.Singer_name, 100 );
}
}
else
{ // 已经是新格式
UINT nLength = m_strSongName.GetLength();
if( nLength > 0 )
{
nLength = nLength < SONG_NAME_MAX_LENGTH-1 ? nLength : SONG_NAME_MAX_LENGTH-1 ;
wmemset( scd.songEx.song_name, 0, SONG_NAME_MAX_LENGTH );
wmemcpy( scd.songEx.song_name, m_strSongName.GetBuffer(), nLength );
} nLength = m_strSingerName.GetLength();
if( nLength > 0 )
{
nLength = nLength < SINGER_NAME_MAX_LENGTH-1 ? nLength : SINGER_NAME_MAX_LENGTH-1 ;
wmemset( scd.songEx.Singer_name, 0, SINGER_NAME_MAX_LENGTH );
wmemcpy( scd.songEx.Singer_name, m_strSingerName.GetBuffer(), nLength );
}
} // !isNewFormat
// scd.song.Singer_Num[0] = m_dwSingerNo; if( m_nSongNameLength == 0 ) // 没有设置长度的情况下自动求长度
m_nSongNameLength = GetTitleLength( scd.songEx.song_name ); memcpy( &scd.songEx.song.song_name_Length, &m_nSongNameLength, 1 );
memcpy( &scd.song.song_name_Length, &m_nSongNameLength, 1 ); wmemcpy( scd.songEx.song.song_py, scd.song.song_py, 10 ); scd.songEx.song.song_Num = m_dwNumber; scd.songEx.song.song_mtv = scd.song.song_mtv; scd.songEx.song.song_Lang = scd.song.song_Lang; scd.songEx.song.song_Category = scd.song.song_Category; scd.songEx.song.song_Volume = scd.song.song_Volume; scd.songEx.song.song_click = scd.song.song_click; scd.songEx.song.song_Accompaniment = scd.song.song_Accompaniment; scd.songEx.song.song_Index = scd.song.song_Index;
//////////////////////////////////////////////////////////////////////////
if( IsAllEnglish( scd.Singer_name ) )
wcsupr( scd.Singer_name );
TrimMidSpace( scd.Singer_name ); if( IsAllEnglish( scd.song.song_name ) )
wcsupr( scd.song.song_name );
TrimMidSpace( scd.song.song_name ); if( IsAllEnglish( scd.songEx.Singer_name ) )
wcsupr( scd.songEx.Singer_name );
TrimMidSpace( scd.songEx.Singer_name ); if( IsAllEnglish( scd.songEx.song_name ) )
wcsupr( scd.songEx.song_name );
TrimMidSpace( scd.songEx.song_name );
if( bOpenSCD )
{ // 写数据到磁盘
cf.SeekToBegin();
cf.Write( &scd, sizeof(scd) );
} // 存储一份副本在内存
memcpy( &m_scdPublic, &scd, sizeof(scd) );
// 设置文件的大小
if ( !isNewFormat || bCreatingNew )
{
if ( hFile )
{
DWORD dwSize = (DWORD)sizeof(SongConfigData);
::SetFilePointer(hFile, dwSize, NULL, FILE_BEGIN);
::SetEndOfFile(hFile);
}
} //
if( bOpenSCD )
cf.Close(); return TRUE; // 保存成功返回TRUE
} return FALSE;
}
请将上面的C函数转换为delphi,谢谢
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货