Attribute VB_Name = "mFile" Option Explicit ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Módulo de leitura/gravação de arquivos ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Guarda o nome do módulo Private Const ST_MY_NAME As String = "mFile" ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Lê um arquivo UNICODE (tenta usar DLL .NET) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function ReadFileDLL(FileAddress As String, Offset As Long, Optional BuffSize As Long = 0) As String On Error GoTo ErrTreat: ' Se for para usar DLL .NET If (bl_StringDLL) Then ' Usa chamada nova ReadFileDLL = obj_StringDLL.FileRead(FileAddress, Offset - 1, BuffSize) ' Sai Exit Function End If ErrTreat: ' Devemos evitar DLL bl_StringDLL = False ' Repassa para chamada antiga ReadFileDLL = txtuniTOwstring(ReadFile(FileAddress, Offset, BuffSize)) End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Lê um arquivo ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function ReadFile(stFileAddress As String, lnInit As Long, Optional lnBuffSize As Long = 0) As String On Error GoTo ErrTreat: Dim itFile As Integer Dim stBuff As String ' Inicia nova instância itFile = FreeFile ' Abre o arquivo Open stFileAddress For Binary Access Read As itFile ' Verifica se não foi informado um tamanho de buff If (lnBuffSize < 1) Then ' Seta tamanho máximo lnBuffSize = LOF(itFile) - lnInit + 1 End If ' Cria buff de leitura stBuff = String(lnBuffSize, 0) ' Lê do arquivo Get itFile, lnInit, stBuff ' Fecha o arquivo Close itFile ' Retorna o buffer ReadFile = stBuff Exit Function ErrTreat: LogErrMessage Err.Description, ST_MY_NAME + ".ReadFile", stFileAddress End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Grava em arquivo UNICODE (tenta usar DLL .NET) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function SaveFileDLL(FileAddress As String, Buff As String, Optional Init As Long = 0, Optional DeleteBefore As Boolean = False) As Boolean On Error GoTo ErrTreat: ' Se for para usar DLL .NET If (bl_StringDLL) Then ' Usa chamada nova obj_StringDLL.FileSave FileAddress, Buff, Init - 1, DeleteBefore ' Seta que salvou com sucesso SaveFileDLL = obj_StringDLL.FileExists(FileAddress) ' Sai Exit Function End If ErrTreat: ' Devemos evitar DLL bl_StringDLL = False ' Repassa para chamada antiga SaveFileDLL = SaveFile(FileAddress, wstringTOtxtuni(Buff), Init, DeleteBefore) End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Grava em arquivo ASCII (tenta usar DLL .NET) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function SaveFileDLLASCII(FileAddress As String, Buff As String, Optional Init As Long = 0, Optional DeleteBefore As Boolean = False) As Boolean On Error GoTo ErrTreat: ' Se for para usar DLL .NET If (bl_StringDLL) Then ' Usa chamada nova obj_StringDLL.FileSaveAscii FileAddress, Buff, Init - 1, DeleteBefore ' Seta que salvou com sucesso SaveFileDLLASCII = obj_StringDLL.FileExists(FileAddress) ' Sai Exit Function End If ErrTreat: ' Devemos evitar DLL bl_StringDLL = False ' Repassa para chamada antiga SaveFileDLLASCII = SaveFile(FileAddress, Buff, Init, DeleteBefore) End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Grava em arquivo ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function SaveFile(stFileAddress As String, stBuff As String, Optional lnInit As Long = 0, Optional blDeleteBefore As Boolean = False) As Boolean On Error GoTo ErrTreat: Dim itFile As Integer ' Se for para deletar antes If blDeleteBefore Then ' Deleta KillFile stFileAddress End If ' Inicia nova instância itFile = FreeFile ' Abre o arquivo para gravação Open stFileAddress For Binary Access Read Write As itFile ' Verifica se foi informado a posição inicial If (lnInit < 1) Then ' Seta posição inicial lnInit = LOF(itFile) + 1 End If ' Grava no arquivo Put itFile, lnInit, stBuff ' Fecha arquivo Close itFile ' Informa que salvou SaveFile = True Exit Function ErrTreat: ' Informa que não salvou SaveFile = False LogErrMessage Err.Description, ST_MY_NAME + ".SaveFile", stFileAddress End Function Public Sub FastSaveFile(stFileAddress As String, stBuff As String) On Error GoTo ErrTreat: Dim itFile As Integer Dim lnInit As Long ' Inicia nova instância itFile = FreeFile ' Abre o arquivo para gravação Open stFileAddress For Binary Access Read Write As itFile ' Seta posição inicial lnInit = LOF(itFile) + 1 ' Grava no arquivo Put itFile, lnInit, stBuff ' Fecha arquivo Close itFile Exit Sub ErrTreat: ' Interrompe Exit Sub End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Verifica se um arquivo existe (tenta usar DLL .NET) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function IsFileDLL(stFileAddress As String) As Boolean On Error GoTo ErrTreat: ' Se for para usar DLL If (bl_StringDLL) Then ' Repassa para DLL IsFileDLL = obj_StringDLL.FileExists(stFileAddress) ' Sai Exit Function End If ErrTreat: ' Devemos evitar DLL bl_StringDLL = False ' Repassa para chamada antiga IsFileDLL = IsFile(stFileAddress) End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Verifica se um arquivo existe ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function IsFile(stFileAddress As String) As Boolean On Error GoTo ErrTreat: ' Verifica se existe arquivo If (GetAttr(stFileAddress) Or vbArchive) Then ' Retorna que existe IsFile = True Else ' Retorna que é inválido IsFile = False End If Exit Function ErrTreat: ' Retorna que não existe IsFile = False End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Deleta um arquivo ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function KillFileDLL(stFileAddress As String) As Boolean On Error GoTo ErrTreat: ' Se for para usar DLL If (bl_StringDLL) Then ' Repassa para DLL KillFileDLL = obj_StringDLL.FileKill(stFileAddress) ' Sai Exit Function End If ErrTreat: ' Devemos evitar DLL bl_StringDLL = False ' Repassa para chamada antiga KillFileDLL = KillFile(stFileAddress) End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Deleta um arquivo ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function KillFile(stFileAddress As String) As Boolean On Error GoTo ErrTreat: ' Deleta arquivo Kill stFileAddress ' Retorna que deletou KillFile = True Exit Function ErrTreat: ' Retorna que não deletou KillFile = False End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Retorna qual seria o endereço base do arquivo Lyrik/Lyric/Text ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function GetBaseAddress(stFileAddress As String) As String On Error GoTo ErrTreat: Dim itPos As Long ' Localiza o último ponto final itPos = InStrRev(stFileAddress, ST_EXTENCION_DOT) ' Se encontrou If (itPos > 1) Then ' Seta arquivo GetBaseAddress = Mid(stFileAddress, 1, itPos - 1) Else ' Seta arquivo GetBaseAddress = stFileAddress End If Exit Function ErrTreat: LogErrMessage Err.Description, ST_MY_NAME + ".GetBaseAddress" End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Retorna qual seria o endereço do arquivo Lyrik ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function GetLyrikAddress(stFileAddress As String) As String On Error GoTo ErrTreat: Dim itPos As Long ' Retorna GetLyrikAddress = GetBaseAddress(stFileAddress) + ST_EXTENCION_DOT + ST_LYRIK_EXTENCION Exit Function ErrTreat: LogErrMessage Err.Description, ST_MY_NAME + ".GetLyrikAddress" End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Retorna qual seria o endereço do arquivo Lyric ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function GetLyricAddress(stFileAddress As String) As String On Error GoTo ErrTreat: Dim itPos As Long ' Retorna GetLyricAddress = GetBaseAddress(stFileAddress) + ST_EXTENCION_DOT + ST_LYRIC_EXTENCION Exit Function ErrTreat: LogErrMessage Err.Description, ST_MY_NAME + ".GetLyricAddress" End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Retorna qual seria a pasta do arquivo Lyrik ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function GetLyricPath(stFileAddress As String) As String On Error GoTo ErrTreat: Dim itPos As Long ' Localiza a última barra itPos = InStrRev(stFileAddress, ST_PATH_SEP) ' Se encontrou If (itPos > 1) Then ' Seta arquivo GetLyricPath = Mid(stFileAddress, 1, itPos) Else ' Seta arquivo GetLyricPath = ST_INVALID_VALUE End If Exit Function ErrTreat: LogErrMessage Err.Description, ST_MY_NAME + ".GetLyricPath" End Function