Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Strings


Cerock

Pergunta

Olá pessoal, tenho um problema...

Estou usando Visual Studio 2005 e este código:

Imports System.IO
Imports System.Collections.ObjectModel
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim files As ReadOnlyCollection(Of String)
        files = My.Computer.FileSystem.GetFiles("C:\", True, "*.txt")

        progs.Text = files
    End Sub
End Class
Neste formulário tem um botão (Button) e um RichTextBox (progs), onde quero que o comando files apareça no RichTextBox. Já tentei usar
progs.Text = files
mas mostra o seguinte erro:
Value of type 'System.Collections.ObjectModel.ReadOnlyCollection(Of String)' cannot be converted do 'String'.

Pelo que eu entendi, este comando files não pode ser uma String. Eu queria saber como que posso transformá-lo em string ou qualquer outro modo pra poder exibir o resultado dentro do RichTextBox.

Não sei se este é o código correto, mas minha intenção é que ele pesquise no Computador todos os arquivos ".txt" encontrados no "C:\" e liste-os no RichTextBox.

Se esta for a maneira correta, alguém poderia me dizer como transformar o files em String, ou, caso não seja, qual seria a maneira correta?

Obrigado.

Editado por Cerock
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Uma maneira rápida e simples de se fazer isso é percorrer a coleção concatenando os elementos em uma string. No exemplo abaixo uso uma StringBuilder por ser uma maneira mais eficiente de concatenar strings:

Dim sb As New System.Text.StringBuilder()

For Each f As String in files
    sb.AppendLine(f)
Next f

progs.Text = sb.ToString()

Certo? ;)

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu ae! O erro de não poder ser convertido em uma string não aparece mais, porém quando eu executo o programa, clico no botão e trava tudo, mostra aquele "Não respondendo"...

No VS ele sempre mostra o erro quando acontece isso, e mostrou o seguinte:

Nesta linha

files = My.Computer.FileSystem.GetFiles("C:\", True, "*.txt")

Ele mostra o seguinte erro

O valor do argumento 'searchType' (-1) é inválido para o tipo Enum 'SearchOption'.

Nome do parâmetro: searchType

Tentei trocar aquele True por FileIO.SearchOption.SearchAllSubDirectories, quando cliquei no botão travou denovo, mostrando o "Não Respondendo" mas não mostrou erro desta vez...

Eu não entendi nada, não faço idéia de como arrumar nem de que erro pode ter ocorrido :blink:

Se poder ajudar..

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

Se você colocar o SearchAllSubDirectories realmente vai travar e levar um bom tempo... porque imagine pegar o nome de *todos* os arquivos partindo do C: e buscando em todos os subdiretórios? Use FileIO.SearchOption.SearchTopLevelOnly no lugar para pegar somente os arquivos existentes na raíz do diretório informado.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu aee! Realmente era o que você disse, pesquisar em todos os diretórios ia trancar, coloquei la só no Diretório C:\ e mostrou 7 arquivos de texto no RichTextBox.

Mas dai coloquei pra pesquisar em todos diretórios e subdiretórios do C:\, travou é claro, mas deixei. Um tempão depois voltei pra ver se tinha listado tudo, e tinha um erro:

Erro ao acessar (C:\ -> *.txt). Acesso negado.
E uma das sujestões era:
Teja em mende de que você tem permissão para acessar todos os diretórios e arquivos, e que eles não estejam em Somente Leitura.

Agora fiquei louco =P.

Editado por Cerock
Link para o comentário
Compartilhar em outros sites

  • 0

Graymalkin,

Já tentei até pesquisar por arquivos .css, .ggx, .ini no disco D:\ que tem poucos com estas extenções, mas da o mesmo problema =/

Erro ao acessar (D:\ -> *.css). Acesso negado.
Erro ao acessar (D:\ -> *.ggx). Acesso negado.
Erro ao acessar (D:\ -> *.ini). Acesso negado.

E já tentei pesquisar no D:\ e no C:\ por arquivos .qualquercoisa (que concerteza não existe), e da a mesma coisa.

Eu quero usar o FileIO.SearchOption.SearchAllSubDirectories porque meu objetivo é criar um software que pesquise em todos os discos rígidos (ou seja, TODO O COMPUTADOR) por arquivos com extenções definidas pelo usuário, para que com os arquivos encontrados seja possível copiá-los para uma pasta (também definida pelo usuário) para fazer um Backup.

O programa vai ser um software de Backup.

Entendeu? =D

Mas primeiro, tenho que aprender a pesquisar arquivos e listá-los (que você já ensinou como), tirar esse erro de Acesso Negado, aprender a manipular os arquivos encontrados e dai, colocar a opção de Extenção e usa-lo. =D

Se poder ajudar (DENOVO :blink:), ficarei muito agradecido. :D

Uma área que não sei muito, mas que mais posso ajudar é PHP. Sou muito fraco em VB.NET ainda. Portanto se tiver alguma dúvida em PHP, posta ai que c eu souber eu respondo e se não souber pesquiso e respondo. ;)

-

Outra coisa: Curti muito o X Player, é bem legal. E curti também o Py.SendMail, porém não conseguir usar o exemplo em PHP, da o erro: No such user.

Editado por Cerock
Link para o comentário
Compartilhar em outros sites

  • 0

O seu Windows deve ser o Vista, né? Ele costuma fazer algumas proibições quanto às raízes das unidades. Bom, mas faça o seguinte aí:

1) Coloque uma ProgressBar no form com o nome de PB;

2) Coloque uma Label no form com o nome lblDiret;

3) Coloque um botão no form (com qualquer nome);

4) Cole a seguinte função dentro da classe do form:

Public Function ObterArquivos(ByVal dir As String, Optional ByVal filtro As String = "*.*") As List(Of IO.FileInfo)
        Dim d As New IO.DirectoryInfo(dir)
        Dim subdiretórios() As IO.DirectoryInfo = Nothing

        Try
            subdiretórios = d.GetDirectories()
        Catch ex As Exception
            'ocorreu algum erro de acesso, então ignoramos
        End Try

        Dim retorno As New List(Of IO.FileInfo)()

        Try
            retorno.AddRange(d.GetFiles(filtro, IO.SearchOption.TopDirectoryOnly))
        Catch ex As Exception
            'ocorreu algum erro de acesso, então ignoramos
        End Try

        If subdiretórios IsNot Nothing Then
            PB.Maximum += subdiretórios.Count

            For Each subdiretório As IO.DirectoryInfo In subdiretórios
                lblDiret.Text = subdiretório.FullName
                PB.Increment(1)
                Application.DoEvents()

                retorno.AddRange(ObterArquivos(subdiretório.FullName, filtro))
            Next
        End If

        Return retorno
    End Function
5) Coloque o seguinte código no evento Click do botão:
Dim arqs As List(Of IO.FileInfo) = ObterArquivos("c:\")

        For Each arq As IO.FileInfo In arqs
            Debug.Print(arq.FullName)
        Next

Desta maneira você poderá ver o progresso da obtenção dos nomes dos arquivos. Note que será gerada uma lista imensa nesse caso (no meu aqui deu mais de 85000 arquivos) que depois será exibida na janela Immediate.

Certo? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Huhu, muito obrigado dnv...

Dessa vez deu um erro aki:

If subdiretórios IsNot Nothing Then
            PB.Maximum += subdiretórios.Count

PB.Maximum += subdiretórios.Count

Erro: 'Count' is not a member of 'System.Array'.

:angry: :angry: :angry: :angry:

Editado por Cerock
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...