Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#7922
Un ayudante de la librería UltraId3Lib: http://home.fuse.net/honnert/UltraID3Lib/UltraID3Lib0968.zip

La diferencia entre esta librería y TagLib Sharp es que UltraID3Lib trabaja sólamente metadatos de tipo ID3v1 e ID3v2 (y las variantes de ID3v2, y los Covers)

Esta librería está optimizada para trabajar archivos MP3, de hecho sólamente trabaja archivos mp3, además hice un pequeño test de velocidad y estos fueron los resultados:

Citar                                                                                               TagLib Sharp        UltraId3Lib
Tiempo transcurrido para eliminar los tags ID3v1 + ID3v2 de 1.000 archivos mp3 (5,2 GB)       05:40 minutos       03:10 minutos

Ahora... si tuviera que elegir entre la lógica interna que usa cada librería, lo cierto es que no sabría por cual decidirme, por eso hice un ayudante para las dos librerías xD.

EDITO: He extendido la Class para manejar las carátulas de los mp3.

EDITO: He vuelto ha extender la Class para exprimir un poco más la librería.

Código (vbnet) [Seleccionar]

#Region " UltraID3Lib "



' [ UltraID3Lib Helper ]
'
' // By Elektro H@cker
'
'
' Instructions:
' 1. Add a reference to "UltraID3Lib.dll" into the project.
'
'
' Examples:
'
' MsgBox(UltraID3Lib.FileIsCorrupt("C:\File.mp3")) ' Result: True or False
' MsgBox(UltraID3Lib.ID3v1_Exist("C:\File.mp3"))   ' Result: True or False
' MsgBox(UltraID3Lib.ID3v2_Exist("C:\File.mp3"))   ' Result: True or False
' MsgBox(UltraID3Lib.IsVBR("C:\File.mp3"))         ' Result: True or False
' MsgBox(UltraID3Lib.Get_Metadata_Errors("C:\File.mp3"))
' MsgBox(UltraID3Lib.Get_Metadata_Warnings("C:\File.mp3"))
'
' MsgBox(UltraID3Lib.Get_ID3_Tags("C:\File.mp3"))
' MsgBox(UltraID3Lib.Get_Title("C:\File.mp3"))
' MsgBox(UltraID3Lib.Get_Artist("C:\File.mp3"))
' MsgBox(UltraID3Lib.Get_Album("C:\File.mp3"))
' MsgBox(UltraID3Lib.Get_Genre("C:\File.mp3"))
' MsgBox(UltraID3Lib.Get_Year("C:\File.mp3"))
' MsgBox(UltraID3Lib.Get_Basic_Tag_Fields("C:\File.mp3"))
'
' UltraID3Lib.Remove_ID3v1_Tag("C:\File.mp3") ' Removes ID3v1 Tag
' UltraID3Lib.Remove_ID3v2_Tag("C:\File.mp3") ' Removes ID3v2 Tag
' UltraID3Lib.Remove_ID3v1_ID3v2_Tags("C:\File.mp3") ' Removes ID3v1 + ID3v2 Tags
'
' UltraID3Lib.Set_Tag_Field("C:\File.mp3", Sub(x) x.ID3v2Tag.Title = "Title Test")
' UltraID3Lib.Set_Tag_Fields("C:\File.mp3", {Sub(x) x.ID3v2Tag.Title = "Title Test", Sub(x) x.ID3v2Tag.Artist = "Artist Test"})
'
' UltraID3Lib.Set_Main_Cover("C:\File.mp3", "C:\Image.jpg")
' UltraID3Lib.Add_Cover("C:\File.mp3", "C:\Image.jpg")
' UltraID3Lib.Delete_Covers("C:\File.mp3")
' PictureBox1.BackgroundImage = UltraID3Lib.Get_Main_Cover("C:\File.mp3")
'
' For Each Genre As String In UltraID3Lib.Get_Generic_ID3_Genres() : MsgBox(Genre) : Next
'
' MsgBox(UltraID3Lib.Get_Bitrate("C:\File.mp3")) ' Result: 320
' MsgBox(UltraID3Lib.Get_Duration("C:\File.mp3")) ' Result: 00:00:00:000
' MsgBox(UltraID3Lib.Get_Frequency("C:\File.mp3")) ' Result: 44100
' MsgBox(UltraID3Lib.Get_Channels("C:\File.mp3")) ' Result: JointStereo
' MsgBox(UltraID3Lib.Get_Layer("C:\File.mp3")) ' Result: MPEGLayer3
' MsgBox(UltraID3Lib.Get_Filesize("C:\File.mp3")) ' Result: 6533677



Imports HundredMilesSoftware.UltraID3Lib

Public Class UltraID3Lib

    ''' <summary>
    ''' Stores the UltraID3Lib object.
    ''' </summary>
    Private Shared [UltraID3] As New UltraID3

    ' ''' <summary>
    ' ''' Stores the Picture things.
    ' ''' </summary>
    ' Private Shared CurrentPictureFrame As ID3v2PictureFrame ' Not used in this Class
    ' Private Shared PictureTypes As ArrayList ' Not used in this Class
    ' Private Shared PictureFrames As ID3FrameCollection ' Not used in this Class
    ' Private Shared PictureIndex As Integer ' Not used in this Class

    ''' <summary>
    ''' Checks if file is possibly corrupt.
    ''' </summary>
    Public Shared Function FileIsCorrupt(ByVal File As String) As Boolean

        Try
            [UltraID3].Read(File)
            Return Convert.ToBoolean( _
                       [UltraID3].GetExceptions(ID3ExceptionLevels.Error).Length _
                     + [UltraID3].GetExceptions(ID3ExceptionLevels.Warning).Length)

        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try

    End Function

    ''' <summary>
    ''' Checks for errors inside file metadata.
    ''' </summary>
    Public Shared Function Get_Metadata_Errors(ByVal File As String) As String

        Try
            [UltraID3].Read(File)
            Return String.Join(Environment.NewLine, _
                               [UltraID3].GetExceptions(ID3ExceptionLevels.Error) _
                               .Select(Function(ex) ex.Message))

        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try

    End Function

    ''' <summary>
    ''' Checks for warnings inside file metadata.
    ''' </summary>
    Public Shared Function Get_Metadata_Warnings(ByVal File As String) As String

        Try
            [UltraID3].Read(File)
            Return String.Join(Environment.NewLine, _
                               [UltraID3].GetExceptions(ID3ExceptionLevels.Warning) _
                               .Select(Function(ex) ex.Message))

        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try

    End Function

    ''' <summary>
    ''' Checks if ID3v1 exists in file.
    ''' </summary>
    Public Shared Function ID3v1_Exist(ByVal File As String) As Boolean

        Try
            [UltraID3].Read(File)
            Return [UltraID3].ID3v1Tag.ExistsInFile
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try

    End Function

    ''' <summary>
    ''' Checks if ID3v2 exists in file.
    ''' </summary>
    Public Shared Function ID3v2_Exist(ByVal File As String) As Boolean

        Try
            [UltraID3].Read(File)
            Return [UltraID3].ID3v2Tag.ExistsInFile
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try

    End Function

    ''' <summary>
    ''' Gets ID3 TagTypes of file.
    ''' </summary>
    Public Shared Function Get_ID3_Tags(ByVal File As String) As String

        Try
            [UltraID3].Read(File)

            Return String.Format("{0}{1}", _
                                 If([UltraID3].ID3v1Tag.ExistsInFile, "ID3v1, ", ""), _
                                 If([UltraID3].ID3v2Tag.ExistsInFile, " ID3v2", "")).Trim

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Function

    ''' <summary>
    ''' Removes entire ID3v1 Tag from file.
    ''' </summary>
    Public Shared Sub Remove_ID3v1_Tag(ByVal File As String)

        Try
            [UltraID3].Read(File)
            [UltraID3].ID3v1Tag.Clear()
            [UltraID3].Write()

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Sub

    ''' <summary>
    ''' Removes entire ID3v2 Tag from file.
    ''' </summary>
    Public Shared Sub Remove_ID3v2_Tag(ByVal File As String)

        Try
            [UltraID3].Read(File)
            [UltraID3].ID3v2Tag.Clear()
            [UltraID3].Write()

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Sub

    ''' <summary>
    ''' Removes entire ID3v1 + ID3v2 Tags from file.
    ''' </summary>
    Public Shared Sub Remove_ID3v1_ID3v2_Tags(ByVal File As String)

        Try
            [UltraID3].Read(File)
            [UltraID3].ID3v1Tag.Clear()
            [UltraID3].ID3v2Tag.Clear()
            [UltraID3].Write()

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Sub

    ''' <summary>
    ''' Gets the Title tag field of file.
    ''' </summary>
    Public Shared Function Get_Title(ByVal File As String) As String

        Try
            [UltraID3].Read(File)
            Return [UltraID3].Title

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Function

    ''' <summary>
    ''' Gets the Artist tag field of file.
    ''' </summary>
    Public Shared Function Get_Artist(ByVal File As String) As String

        Try
            [UltraID3].Read(File)
            Return [UltraID3].Artist

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Function

    ''' <summary>
    ''' Gets the Album tag field of file.
    ''' </summary>
    Public Shared Function Get_Album(ByVal File As String) As String

        Try
            [UltraID3].Read(File)
            Return [UltraID3].Album

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Function

    ''' <summary>
    ''' Gets the Genre tag field of file.
    ''' </summary>
    Public Shared Function Get_Genre(ByVal File As String) As String

        Try
            [UltraID3].Read(File)
            Return [UltraID3].Genre

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Function

    ''' <summary>
    ''' Gets the Year tag field of file.
    ''' </summary>
    Public Shared Function Get_Year(ByVal File As String) As String

        Try
            [UltraID3].Read(File)
            Return [UltraID3].Year

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Function

    ''' <summary>
    ''' Gets the basic tag fields of file.
    ''' </summary>
    Public Shared Function Get_Basic_Tag_Fields(ByVal File As String) As String

        Try
            [UltraID3].Read(File)

            Return String.Format("Title: {1}{0}Artist: {2}{0}Album: {3}{0}Genre: {4}{0}Year: {5}", Environment.NewLine, _
                                 [UltraID3].Title, _
                                 [UltraID3].Artist, _
                                 [UltraID3].Album, _
                                 [UltraID3].Genre, _
                                 [UltraID3].Year)

        Catch ex As Exception
            Throw New Exception(ex.Message)
            Return String.Empty

        End Try

    End Function

    ''' <summary>
    ''' Sets a Tag field.
    ''' </summary>
    Public Shared Sub Set_Tag_Field(ByVal File As String, _
                                    ByVal FieldSetter As Action(Of UltraID3))

        Try
            [UltraID3].Read(File)
            FieldSetter([UltraID3])
            [UltraID3].Write()

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Sub

    ''' <summary>
    ''' Sets multiple Tag fields.
    ''' </summary>
    Public Shared Sub Set_Tag_Fields(ByVal File As String, _
                                     ByVal FieldSetter() As Action(Of UltraID3))


        Try
            [UltraID3].Read(File)

            For Each Field As Action(Of UltraID3) In FieldSetter
                Field([UltraID3])
            Next

            [UltraID3].Write()

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Sub

    ''' <summary>
    ''' Sets Main Picture Cover.
    ''' </summary>
    Public Shared Sub Set_Main_Cover(ByVal File As String, _
                            ByVal Picture As String)

        Try
            [UltraID3].Read(File)
            [UltraID3].ID3v2Tag.Frames.Add( _
                       New ID3v23PictureFrame(New Bitmap(Picture), PictureTypes.CoverFront, String.Empty, TextEncodingTypes.Unicode))

            [UltraID3].Write()

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Sub

    ''' <summary>
    ''' Adds a Picture Cover.
    ''' </summary>
    Public Shared Sub Add_Cover(ByVal File As String, _
                                ByVal Picture As String)

        Try
            [UltraID3].Read(File)
            [UltraID3].ID3v2Tag.Frames.Add( _
                       New ID3v23PictureFrame(New Bitmap(Picture), PictureTypes.Other, String.Empty, TextEncodingTypes.Unicode))
            [UltraID3].Write()

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Sub

    ''' <summary>
    ''' Deletes all Picture Covers.
    ''' </summary>
    Public Shared Sub Delete_Covers(ByVal File As String)

        Try
            [UltraID3].Read(File)

            [UltraID3].ID3v2Tag.Frames.Remove( _
                       [UltraID3].ID3v2Tag.Frames.GetFrames(MultipleInstanceID3v2FrameTypes.ID3v22Picture))

            [UltraID3].ID3v2Tag.Frames.Remove( _
                       [UltraID3].ID3v2Tag.Frames.GetFrames(MultipleInstanceID3v2FrameTypes.ID3v23Picture))

            [UltraID3].Write()

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Sub

    ''' <summary>
    ''' Gets Main Picture Cover.
    ''' </summary>
    Public Shared Function Get_Main_Cover(ByVal File As String) As Bitmap

        Try
            [UltraID3].Read(File)

            If [UltraID3].ID3v2Tag.Frames.GetFrame(MultipleInstanceID3v2FrameTypes.ID3v23Picture, False) IsNot Nothing Then
                Return DirectCast( _
                       [UltraID3].ID3v2Tag.Frames.GetFrame(MultipleInstanceID3v2FrameTypes.ID3v23Picture, False),  _
                       ID3v2PictureFrame).Picture
            End If

            If [UltraID3].ID3v2Tag.Frames.GetFrame(MultipleInstanceID3v2FrameTypes.ID3v22Picture, False) IsNot Nothing Then
                Return DirectCast( _
                       [UltraID3].ID3v2Tag.Frames.GetFrame(MultipleInstanceID3v2FrameTypes.ID3v22Picture, False),  _
                       ID3v2PictureFrame).Picture
            End If

            Return Nothing

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Function

    ''' <summary>
    ''' Gets the generic ID3 genre names.
    ''' </summary>
    Public Shared Function Get_Generic_ID3_Genres() As String()
        Return UltraID3.GenreInfos.Cast(Of GenreInfo).Select(Function(Genre) Genre.Name).ToArray
    End Function

    ''' <summary>
    ''' Gets the Audio Bitrate.
    ''' </summary>
    Public Shared Function Get_Bitrate(ByVal File As String) As Short

        Try
            [UltraID3].Read(File)
            Return [UltraID3].FirstMPEGFrameInfo.Bitrate

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Function

    ''' <summary>
    ''' Gets the Audio Duration.
    ''' </summary>
    Public Shared Function Get_Duration(ByVal File As String) As String

        Try
            [UltraID3].Read(File)
            Return String.Format("{0:00}:{1:00}:{2:00}:{3:000}", _
                                  [UltraID3].FirstMPEGFrameInfo.Duration.Hours, _
                                  [UltraID3].FirstMPEGFrameInfo.Duration.Minutes, _
                                  [UltraID3].FirstMPEGFrameInfo.Duration.Seconds, _
                                  [UltraID3].FirstMPEGFrameInfo.Duration.Milliseconds)

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Function

    ''' <summary>
    ''' Gets the Audio Frequency.
    ''' </summary>
    Public Shared Function Get_Frequency(ByVal File As String) As Integer

        Try
            [UltraID3].Read(File)
            Return [UltraID3].FirstMPEGFrameInfo.Frequency

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Function

    ''' <summary>
    ''' Gets the Audio MPEG Layer.
    ''' </summary>
    Public Shared Function Get_Layer(ByVal File As String) As String

        Try
            [UltraID3].Read(File)
            Return [UltraID3].FirstMPEGFrameInfo.Layer.ToString

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Function

    ''' <summary>
    ''' Gets the Audio Channel mode.
    ''' </summary>
    Public Shared Function Get_Channels(ByVal File As String) As String

        Try
            [UltraID3].Read(File)
            Return [UltraID3].FirstMPEGFrameInfo.Mode.ToString

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Function

    ''' <summary>
    ''' Gets the File Size.
    ''' </summary>
    Public Shared Function Get_Filesize(ByVal File As String) As Long

        Try
            [UltraID3].Read(File)
            Return [UltraID3].Size

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Function

    ''' <summary>
    ''' Checks if VBR header is present in file.
    ''' </summary>
    Public Shared Function IsVBR(ByVal File As String) As Boolean

        Try
            [UltraID3].Read(File)
            Return [UltraID3].FirstMPEGFrameInfo.VBRInfo.WasFound

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try

    End Function

End Class

#End Region
#7923
Un ayudante para manejar la librería TabLig Sharp: https://github.com/mono/taglib-sharp

La librería sirve para editar los metadatos de archivos de música, entre otros formatos como imágenes png, etc...

Mi Class está pensada para usarse con archivos MP3.

Código (vbnet) [Seleccionar]
#Region " TagLib Sharp Helper "


' [ TagLib Sharp Helper ]
'
' // By Elektro H@cker
'
'
' Instructions:
' 1. Add a reference to "taglib-sharp.dll" into the project.
'
'
' Examples:
'
' MsgBox(TagLibSharp.FileIsCorrupt("C:\File.mp3")) ' Result: True or False
' MsgBox(TagLibSharp.FileIsWriteable("C:\File.mp3")) ' Result: True or False
' MsgBox(TagLibSharp.Get_Title("C:\File.mp3"))
' MsgBox(TagLibSharp.Get_Artist("C:\File.mp3"))
' MsgBox(TagLibSharp.Get_Album("C:\File.mp3"))
' MsgBox(TagLibSharp.Get_Genre("C:\File.mp3"))
' MsgBox(TagLibSharp.Get_Year("C:\File.mp3"))
' MsgBox(TagLibSharp.Get_Basic_TagInfo("C:\File.mp3"))
' TagLibSharp.RemoveTag("C:\File.mp3", TagLib.TagTypes.Id3v1 Or TagLib.TagTypes.Id3v2) ' Removes ID3v1 + ID3v2 Tags
' TagLibSharp.Set_Tag_Fields("C:\Test.mp3", Sub(x) x.Tag.Title = "Title Test"})
' TagLibSharp.Set_Tag_Fields("C:\Test.mp3", {Sub(x) x.Tag.Title = "Title Test", Sub(x) x.Tag.Performers = {"Artist Test"}})


Public Class TagLibSharp

    ''' <summary>
    ''' Stores the Taglib object.
    ''' </summary>
    Private Shared TagFile As TagLib.File = Nothing

    ''' <summary>
    ''' Checks if file is possibly corrupted.
    ''' </summary>
    Public Shared Function FileIsCorrupt(ByVal File As String) As Boolean

        Try
            Return TagLib.File.Create(File).PossiblyCorrupt

        Catch ex As Exception
            Throw New Exception(ex.Message)
            Return True

        Finally
            If TagFile IsNot Nothing Then TagFile.Dispose()

        End Try

    End Function

''' <summary>
''' Checks if file can be written.
''' </summary>
Public Shared Function FileIsWriteable(ByVal File As String) As Boolean

    Try
        Return TagLib.File.Create(File).Writeable

    Catch ex As Exception
        Throw New Exception(ex.Message)
        Return True

    Finally
        If TagFile IsNot Nothing Then TagFile.Dispose()

    End Try

End Function

''' <summary>
''' Get TagTypes of file.
''' </summary>
Public Shared Function Get_Tags(ByVal File As String) As String

    Try
        Return TagLib.File.Create(File).TagTypes.ToString

    Catch ex As Exception
        Throw New Exception(ex.Message)
        Return String.Empty

    Finally
        If TagFile IsNot Nothing Then TagFile.Dispose()

    End Try

End Function

''' <summary>
''' Remove a entire Tag from file.
''' </summary>
Public Shared Sub RemoveTag(ByVal File As String, ByVal TagTypes As TagLib.TagTypes)

    Try
        TagFile = TagLib.File.Create(File)
    Catch ex As Exception
        Throw New Exception(ex.Message)
        Exit Sub
    End Try

    Try

        If Not TagFile.PossiblyCorrupt _
        AndAlso TagFile.Writeable Then

            TagFile.RemoveTags(TagTypes)
            TagFile.Save()

        End If

    Catch ex As Exception
        Throw New Exception(ex.Message)

    Finally
        If TagFile IsNot Nothing Then TagFile.Dispose()

    End Try

End Sub

''' <summary>
''' Gets the Title tag field of file.
''' </summary>
Public Shared Function Get_Title(ByVal File As String) As String

    Try
        Return TagLib.File.Create(File).Tag.Title

    Catch ex As Exception
        Throw New Exception(ex.Message)
        Return String.Empty

    Finally
        If TagFile IsNot Nothing Then TagFile.Dispose()

    End Try

End Function

''' <summary>
''' Gets the Artist tag field of file.
''' </summary>
Public Shared Function Get_Artist(ByVal File As String) As String

    Try
        Return TagLib.File.Create(File).Tag.Performers(0)

    Catch ex As Exception
        Throw New Exception(ex.Message)
        Return String.Empty

    Finally
        If TagFile IsNot Nothing Then TagFile.Dispose()

    End Try

End Function

''' <summary>
''' Gets the Album tag field of file.
''' </summary>
Public Shared Function Get_Album(ByVal File As String) As String

    Try
        Return TagLib.File.Create(File).Tag.Album

    Catch ex As Exception
        Throw New Exception(ex.Message)
        Return String.Empty

    Finally
        If TagFile IsNot Nothing Then TagFile.Dispose()

    End Try

End Function

''' <summary>
''' Gets the Genre tag field of file.
''' </summary>
Public Shared Function Get_Genre(ByVal File As String) As String

    Try
        Return TagLib.File.Create(File).Tag.Genres(0)

    Catch ex As Exception
        Throw New Exception(ex.Message)
        Return String.Empty

    Finally
        If TagFile IsNot Nothing Then TagFile.Dispose()

    End Try

End Function

''' <summary>
''' Gets the Year tag field of file.
''' </summary>
Public Shared Function Get_Year(ByVal File As String) As String

    Try
        Return TagLib.File.Create(File).Tag.Year

    Catch ex As Exception
        Throw New Exception(ex.Message)
        Return String.Empty

    Finally
        If TagFile IsNot Nothing Then TagFile.Dispose()

    End Try

End Function

''' <summary>
''' Gets the basic tag fields of file.
''' </summary>
Public Shared Function Get_Basic_TagInfo(ByVal File As String) As String

    Try
        TagFile = TagLib.File.Create(File)

        Return String.Format("Title: {1}{0}Artist: {2}{0}Album: {3}{0}Genre: {4}{0}Year: {5}", Environment.NewLine, _
                             TagFile.Tag.Title, _
                             TagFile.Tag.Performers(0), _
                             TagFile.Tag.Album, _
                             TagFile.Tag.Genres(0), _
                             TagFile.Tag.Year)

    Catch ex As Exception
        Throw New Exception(ex.Message)
        Return String.Empty

    Finally
        If TagFile IsNot Nothing Then TagFile.Dispose()

    End Try

End Function

''' <summary>
''' Sets a Tag field.
''' </summary>
Public Shared Sub Set_Tag_Fields(ByVal File As String, _
                                   ByVal FieldSetter As Action(Of TagLib.File))

    Try
        TagFile = TagLib.File.Create(File)
    Catch ex As Exception
        Throw New Exception(ex.Message)
        Exit Sub
    End Try

    Try

        If Not TagFile.PossiblyCorrupt _
        AndAlso TagFile.Writeable Then

            FieldSetter(TagFile)
            TagFile.Save()

        End If

    Catch ex As Exception
        Throw New Exception(ex.Message)

    Finally
        If TagFile IsNot Nothing Then TagFile.Dispose()

    End Try

End Sub

''' <summary>
''' Sets multiple Tag fields.
''' </summary>
Public Shared Sub Set_Tag_Fields(ByVal File As String, _
                                   ByVal FieldSetter() As Action(Of TagLib.File))

    Try
        TagFile = TagLib.File.Create(File)
    Catch ex As Exception
        Throw New Exception(ex.Message)
        Exit Sub
    End Try

    Try

        If Not TagFile.PossiblyCorrupt _
        AndAlso TagFile.Writeable Then

            For Each Field In FieldSetter
                Field(TagFile)
            Next

            TagFile.Save()

        End If

    Catch ex As Exception
        Throw New Exception(ex.Message)

    Finally
        If TagFile IsNot Nothing Then TagFile.Dispose()

    End Try

End Sub

End Class

#End Region
#7924
Cita de: daryo en  5 Octubre 2013, 18:36 PMWTF con algunas personas

Además vaya un mentiroso.

@Inzect02
Que tu digas que el ataque duró 10-15 minutos no cambia la realidad, no va a cambiar lo que pone en el registro del Admin, ni tampoco te va a hacer mejor persona,
la mayoría que somos habituales al foro sabemos que tiraste la página durante 1-2 horas completas (sinó más), el tiempo exacto solo lo sabrán los que hayan controlado la duración de la caida completa, y El-Brujo.

En fín, que los que mandan hagan lo que quieran contigo, yo no me meto más para desmentir las palabras de un mentiroso.

Saludos!
#7925
Cita de: Inzect02 en  5 Octubre 2013, 17:36 PMEy yo lo hice para probar un rato el servidor, ya que estoy haciendo una herramienta que en unas semanas lo publicare.

Y lo dice tan pancho!

El fín no justifica los medios, has podido testear con cualquier otro foro.

¿Se supone que el administrador debe ser comprensivo con tus actos?, tu gracia ha afectado a miles de usuarios y segúramente haya afectado económicamente de alguna manera a la página, no tienes ningún perdón por mi parte, desde luego si yo fuera el administrador, si me metiese en la piel de El-Brujo esto no quedaría así, y si, haría lo que me plazca contigo y con los que son igual que tú.

Saludos
#7926
El mundo de la programación es como el mundo de los militares aeronavales y otros muchos, ya seas de raza china, español, o mongol, un requisito esencial es dominar el Inglés ya que este es el idioma establecido para comunicarte.

Los chinos dejan comentarios en chino dentro de los códigos, para mi no ha sido común ver códigos chinos/japos con comentarios en Inglés (aunque si que los hay), pero obviamente se basan en el Inglés para todo lo demás.

...Y tampoco es tán dificil, no es lo mismo aprender un lenguaje entero, hablar, leer, escribir, entender... que aprender el significado de 200-500 términos.

Saludos!
#7927
@Darksythe

No, con puro Batch olvídate de hacer cosas complejas :P, a menos que utilices herramientas de terceros como por ejemplo NirCMD.

Con cualquier otro lenguaje (Ej: VBS) podrías hacerlo enviando pulsaciones del teclado al navegador pero es una lata y no sería del todo efectivo,
necesitarías averiguar las combinaciones para cambiar a modo Fullscreen de cada navegador... y averiguar que navegador se inició para enviar la tecla correspondiente a ese navegador,
tu Bat no iniciará un nuevo proceso del navegador predeterminado si este ya se encuentra corriendo, además ten en cuenta que puede haber 1 navegador corriendo o más de 1 en el equipo...
Son muchas variables a tomar en cuenta.

Por ejemplo a firefox puedes enviarle la pulsación de la tecla "F11" y pasa a modo fullscreen, pero si se trata de un laptop se supone que tienes que enviar la combinación "fín + f11"...

(Aunque diréctamente se podría deshabilitar el botón "cerrar" importando y utilizando unas funciones de la API "user32.dll", pero para esto recomiendo otros lenguajes...)

Lo que intentas hacer no me parece ético, pero de todas formas creo que no merece la pena intentarlo por el esfuerzo que requiere y la poca eficacia que tendría en Batch.

Saludos!
#7928
Código (dos) [Seleccionar]
   @ECHO OFF
   START /B "" "%ProgramFiles%\Plantas Contra Zombis\plantsvszombies.exe"
   START /B "" "http://www.google.com/" & Rem Esto iniciará el navegador predeterminado.
   Pause&Exit


Saludos
#7929
Dudas Generales / Re: qué formatos son?
4 Octubre 2013, 19:56 PM
Cita de: jemez44 en  4 Octubre 2013, 18:33 PMEntendí que para que te saliera el correspondiente icono debias tener instalado el correspondiente programa que lo abre.

Es una posible opción pero no es del todo necesario,
si te instalas el programa que lee "X" archivos lo más común es que también le asigne un icono a esos archivos de "X" extensión,
pero no es 100% seguro que el programa vaya a modificar los iconos de los archivos... eso depende de las "caracteristicas" de dicha aplicación.

Lo que intento decirte por ponerte un ejemplo es que yo no uso el Word y le asigné un icono a los archivos doc y docx para diferenciarlos de otro tipo de archivos:



Se puede hacer sin instalar la aplicación que lea archivos "doc".

Saludos
#7930
Dudas Generales / Re: qué formatos son?
4 Octubre 2013, 17:17 PM
Cita de: jemez44 en  4 Octubre 2013, 16:41 PMSi en la imagen sale ".pl" ¿eso significa que tengo instalado un intérprete de perl?

No, significa que es un archivo ".pl", ni más, ni menos...

Como te intenté explicar necesitas instalar Perl si quieres leer archivos ".pl", pero vamos, que el archivo lo puedes abrir con Notepad también.

Saludos