VB 2012 - PESQUISAR SDF COM ARQUIVOS EM UMA PASTA!

SOBREIRA 25/06/2016 21:58:01
#464061
Peço ajuda para conferir se os nomes das músicas em MP3 gravados em uma tabela SDF estão na pasta C:\RcVB\B.
****************************************************************************************************************************************************
Consegui fazer uma rotina para conferir se estes nomes estão gravados corretamente na tabela, sendo; Nomes da pasta conferindo com os dados da tabela. Esta rotina não informa se falta alguma música entre PASTA/TABELA, somente informar se a gravação está correta.

ABAIXO TRANSCREVO A MINHA ROTINA:
=================================

Private Sub Ir_Pasta_Click(sender As Object, e As EventArgs) Handles Ir_Pasta.Click
ProgressBar1.Value = 0
conecta.Close()
[ô]conecta.ConnectionString = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source = [Ô] & ConnAgenda & [Ô][Ô]
conecta.ConnectionString = [Ô]Data Source=|DataDirectory|\BD_Musical.sdf[Ô]
conecta.Open()
comando.Connection = conecta
Dim usuariobd As String = Nothing
Dim senhabd As String = Nothing
[ô]*****************************************************************
Dim DirDiretorio As DirectoryInfo = New DirectoryInfo([Ô]C:\RcVB\B[Ô])
Dim oFileInfoCollection() As FileInfo
Dim oFileInfo As FileInfo
Dim i As Integer
[ô]### Preenche o FileCollection com um Array de objetos FileInfo
oFileInfoCollection = DirDiretorio.GetFiles([Ô]*.mp3[Ô])
ProgressBar1.Maximum = oFileInfoCollection.Length()
[ô]**************************************************
For i = 0 To oFileInfoCollection.Length() - 1
oFileInfo = oFileInfoCollection.GetValue(i)
[ô] ListBox1.Items.Add(oFileInfo.Name)
V_NomMus22 = (oFileInfo.Name)
[ô] V_NomMus44 = [Ô]C:\RcVB\B\[Ô] + V_NomMus22
[ô] V_Pasta = SemApostofo(V_NomMus44)
V_Ptb22 = Path.GetFileNameWithoutExtension(V_NomMus22)
conecta.Close()
[ô]conecta.ConnectionString = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source = [Ô] & ConnAgenda & [Ô][Ô]
conecta.ConnectionString = [Ô]Data Source=|DataDirectory|\BD_Musical.sdf[Ô]
conecta.Open()
comando.Connection = conecta
[ô]Conectar()
[ô] comando = New SqlCeCommand([Ô]select Nom_Mus from Musicas where Nom_Mus.touppet()=[ô][Ô] & V_Ptb22 + [Ô][ô][Ô], conecta)
comando = New SqlCeCommand([Ô]select Nom_Mus from Musicas where Nom_Mus=[ô][Ô] & V_Ptb22 + [Ô][ô][Ô], conecta)
[ô]*************************************************************************************************
checar = comando.ExecuteReader
While checar.Read
If checar.Item([Ô]Nom_Mus[Ô]) = V_Ptb22 Then
tt = checar.Item([Ô]Nom_Mus[Ô])
Else
tt = checar.Item([Ô]Nom_Mus[Ô])
[ô] MsgBox(V_Ptb22 & [Ô]No c:\ [Ô] & tt)
MsgBox([Ô]* ERRO NA MÚSICA. VERIFIQUE A SITUAÇÃO DO CADASTRO/TABELA *[Ô] + vbCrLf +
[Ô] [Ô] + vbCrLf +
[Ô]Na pasta..: [Ô] + V_Ptb22 + vbCrLf +
[Ô]Na tabela.: [Ô] + tt + vbCrLf +
[Ô] [Ô] + vbCrLf +
[Ô]Obs: As letras maiusculas/minusculas têm que coincidirem[Ô])
End If
[ô]*****
End While
[ô]********
If ProgressBar1.Value = ProgressBar1.Maximum Then
Timer55.Stop()
Else
ProgressBar1.Increment(1)
End If
[ô]*****
Next
If conecta.State = ConnectionState.Open Then conecta.Close()
checar.Close()
MsgBox([Ô]Conferência concluída![Ô])
Me.Close()
End Sub
KERPLUNK 25/06/2016 23:38:53
#464064
Resposta escolhida
Deixa ver se eu entendi. Você quer conferir se os arquivos de uma pasta, batem com os de uma tabela, isso?
SOBREIRA 26/06/2016 08:36:58
#464071
Citação:

:
Deixa ver se eu entendi. Você quer conferir se os arquivos de uma pasta, batem com os de uma tabela, isso?


O que estou querendo fazer é pegar o registro da Tabela em SDF e conferir com o arquivo em MP3 existente em na pasta C:\RcVB\B.
Exemplo:
Na tabela: Asa Branca.mp3
Conferir se o arquivo da música esta na pasta.
Grato!
KERPLUNK 26/06/2016 11:02:44
#464072
Então o que você vai fazer é listar todos os registros da tabela em um List<T> e o mesmo com os arquivos da pasta, com um loop, percorrer toda a List<T> de registros e para cada um, procurar o arquivo com o nome correspondente na pasta. Nesse List<T>, coloque uma propriedade booleana para marcar se o o arquivo correspondente existe. No final desse loop, você terá marcado no List<T> todos os arquivos que constam, então basta usar uma expressão lambda para buscar os que não possuem essa propriedade marcada.
Mas o que você está fazendo é o processo inverso, pesquisando os arquivos da pasta para então procurar na tabela. Dessa maneira é mais difícil de constatar quais os arquivos que estão faltantes, porque o que você quer fazer é ver se na pasta constam todos os arquivos da tabela e não se na tabela se encontram todos os arquivos da pasta.
SOBREIRA 26/06/2016 11:28:31
#464074
Citação:

:
Então o que você vai fazer é listar todos os registros da tabela em um List<T> e o mesmo com os arquivos da pasta, com um loop, percorrer toda a List<T> de registros e para cada um, procurar o arquivo com o nome correspondente na pasta. Nesse List<T>, coloque uma propriedade booleana para marcar se o o arquivo correspondente existe. No final desse loop, você terá marcado no List<T> todos os arquivos que constam, então basta usar uma expressão lambda para buscar os que não possuem essa propriedade marcada.
Mas o que você está fazendo é o processo inverso, pesquisando os arquivos da pasta para então procurar na tabela. Dessa maneira é mais difícil de constatar quais os arquivos que estão faltantes, porque o que você quer fazer é ver se na pasta constam todos os arquivos da tabela e não se na tabela se encontram todos os arquivos da pasta.


*************************************************************************
Realmente, na minha função é a pesquisa se os arquivos da pasta estão todos gravados e corretos na minha tabela. Isto é necessário.
***************************************************************************************************************************************************************************
Na segunda opção gostaria de saber se tudo que está gravado na minha Tabela [Ô]MÚSICAS.SDF[Ô] estão na minha pasta [Ô]C:\RcVB|B[Ô]. é exatamente isto que não estou conseguindo. Assim, pedi ajuda.
KERPLUNK 26/06/2016 11:32:04
#464075
Bom, pois então basta fazer como eu disse que com certeza vai dar certinho.
SOBREIRA 28/06/2016 21:42:00
#464222
Varo Kerplunk,

Tentei montar a função conforme orientado, porém não logrei êxito. Possivelmente não soube entender a sequência.
KERPLUNK 28/06/2016 22:26:43
#464232
Me mostre o que conseguiu até agora
SOBREIRA 29/06/2016 19:35:01
#464312
Criei dois Listbox em um form, sendo:

PARA A TABELA.SDF
---------------------------
Dim T22 As Integer
[ô] Dim texto As String
Dim TT44 As String
conecta.ConnectionString = [Ô]Data Source=|DataDirectory|\BD_Musical.sdf[Ô]
conecta.Open()
comando.Connection = conecta
comando = New SqlCeCommand([Ô]select * from Musicas order by Nom_mus[Ô], conecta)
[ô]*************************************************************************************************
checar = comando.ExecuteReader
checar.Read()
[ô]ListBox2.Sorted = True
Do While checar.Read
[ô]ListBox2.Sorted = True
TT44 = checar.Item([Ô]Nom_Mus[Ô]).ToString
[ô] texto = checar.Item([Ô]Nom_Mus[Ô]).ToString
For T22 = 1 To checar.FieldCount - 1
TT44 = checar.Item([Ô]Nom_Mus[Ô]).ToString
Next T22
ListBox2.Items.Add(TT44)
Loop
Dim Quant9 As Integer = ListBox2.Items.Count
MsgBox([Ô]A lista contém [Ô] & Quant9 & [Ô] itens.[Ô])
MsgBox([Ô]FINAL DA PESQUISA da tabela[Ô])


PARA OS ARUIVOS DA PASTA
---------------------------------------
Dim DirDiretorio As DirectoryInfo = New DirectoryInfo([Ô]C:\RcVB\B[Ô])
Dim oFileInfoCollection() As FileInfo
Dim oFileInfo As FileInfo
ListBox1.Sorted = True
Dim i As Integer
[ô]### Preenche o FileCollection com um Array de objetos FileInfo
oFileInfoCollection = DirDiretorio.GetFiles([Ô]*.mp3[Ô])
[ô]### Podemos utilizar os objetos da coleção oFileCollection para preencher um ListBox por exemplo
For i = 0 To oFileInfoCollection.Length() - 1
oFileInfo = oFileInfoCollection.GetValue(i)
ListBox1.Items.Add(oFileInfo.Name)
Next
Dim Quant99 As Integer = ListBox1.Items.Count
MsgBox([Ô]A lista contém [Ô] & Quant99 & [Ô] itens.[Ô])
MsgBox([Ô]FINAL DA PESQUISA[Ô])

OS DOIS LISTBOX SÃO PREENCHIDOS COM OS DADOS EXISTENTES, PORéM NÃO SOUBE FAZER A PESQUISA ENTRE ELES.
KERPLUNK 29/06/2016 19:53:12
#464314
Você não está usando List<T> como falei... No meu canal no youtube, eu explico isso em detalhes e com vários exemplos
Tópico encerrado , respostas não são mais permitidas