Já baixei os vídeos do PDC2008 e agora eu vou assistir…

… hum, qual arquivo escolho? O BB37.WMV ou o PC53.WMV? Pois é, se você baixou mais de um arquivo (baixei tudo, deu mais de 60Gb… baixei faz tempo, é verdade, mas só agora estou organizando o disco para gravar isso tudo em DVD), deve ter percebido o nome muito explicativo deles. Pois não é que olhando melhor o diretório, percebemos que o título do arquivo tem o nome (quase) perfeito?

image

Meu primeiro desafio como desenvolvedor foi verificar se existia um suporte nativo no .NET 3.5 para que essa informação seja acessada. Não tem ou se tem é tão bem escondida que eu não achei nem no MSDN e nem no Google…

Eis que começo a procurar um jeito e não encontro, não encontro, não encontro… Até que encontrei pesquisando no Google () um jeito de acessar essa informação através do componente COM Shell32. Vou ser sincero, sou um ignorante em Shell32…

Minha missão agora era acessar de forma programática a informação no título do arquivo e renomear o arquivo com esse nome…

Pois foi isso que o bloco de código abaixo fez e me ajudou muito… detalhe, os arquivos do MIX2008 estão do mesmo jeito… hehehe

    Sub Main()
 
        Dim objShell As Shell
        Dim objFolder As Folder
        Const Pasta As String = _
            "C:\Documents and Settings\mchila\Desktop\PDC2008\"
 
        objShell = New Shell
        objFolder = objShell.NameSpace _
            ("C:\Documents and Settings\mchila\Desktop\PDC2008\")
 
        If (Not objFolder Is Nothing) Then
            Dim objFolderItem As FolderItem
 
            Dim minhaPasta As New IO.DirectoryInfo(Pasta)
 
            For Each Arquivo As IO.FileInfo In minhaPasta.GetFiles
 
                objFolderItem = objFolder.ParseName(Arquivo.Name)
 
                If (Not objFolderItem Is Nothing) Then
                    Dim szItem As String
                    szItem = objFolder.GetDetailsOf(objFolderItem, 10) _
                    .Replace(":", "-").Replace("""", "") _
                    .Replace("?", "").Replace("´", " ")
                    Arquivo.CopyTo _
                        (Pasta & szItem & Arquivo.Extension, True)
                End If
 
            Next
 
            objFolderItem = Nothing
        End If
 
        objFolder = Nothing
        objShell = Nothing
 
        Console.WriteLine("Pronto")
 
    End Sub

Pois bem, era isso.. só isso… não vou explicar o código, acho que não precisa… se alguém souber de alguma solução mais elegante, me avisa…

Abraços…

Chilá!@!

No Comments