Ricardo Goncalves Posted February 16, 2016 at 04:15 PM Report Share #593581 Posted February 16, 2016 at 04:15 PM (edited) Boas, estou a usar o seguinte código em loop para estar sempre a procura do ficheiro descrito no código mas apenas o faz na 1º vez, na segunda vez que detecta o ficheiro dá o erro: An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll Additional information: O processo não pode aceder ao ficheiro 'C:\teste\teste_cliente.txt' porque está a ser utilizado por outro processo. na linha For Each line In File.ReadAllLines(fileName) Já tentei limpar a variável onde está o caminho do ficheiro mas sem sucesso filename=vbempty Alguém me consegue dizer como libertar o ficheiro cada vez que é usado. Em baixo o código que estou a usar: Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim counter As Integer = 1 Do Until counter = 0 Dim fileName As String = "C:\teste\teste_cliente.txt" Using conn As New SqlConnection("Connection String") Dim query As String = "Query String" If My.Computer.FileSystem.FileExists(fileName) Then Using cmd As New SqlCommand(query, conn) conn.Open() For Each line In File.ReadAllLines(fileName) Dim parts As String() = line.Split(New Char() {";"c}) cmd.Parameters.Clear() cmd.Parameters.AddWithValue("@a", (parts(0))) cmd.Parameters.AddWithValue("@b", (parts(1))) cmd.Parameters.AddWithValue("@c", (parts(2))) cmd.Parameters.AddWithValue("@d", (parts(3))) cmd.Parameters.AddWithValue("@e", (parts(4))) cmd.Parameters.AddWithValue("@f", (parts(5))) cmd.Parameters.AddWithValue("@g", (parts(6))) cmd.Parameters.AddWithValue("@h", (parts(7))) cmd.Parameters.AddWithValue("@i", (parts(8))) cmd.Parameters.AddWithValue("@j", (parts(9))) cmd.Parameters.AddWithValue("@k", (parts(10))) cmd.Parameters.AddWithValue("@l", (parts(11))) TextBox1.Text = parts(0) TextBox2.Text = parts(1) Try cmd.ExecuteNonQuery() Catch ex As Exception MessageBox.Show(ex.Message) Exit Try End Try Next End Using My.Computer.FileSystem.RenameFile(fileName, "Teste_Cliente_" & System.DateTime.Now.ToString("yyyyMMdd HHmmss") & ".txt") End If End Using Loop End Sub Edited February 16, 2016 at 04:25 PM by Ricardo Goncalves Link to comment Share on other sites More sharing options...
He B TeMy Posted February 16, 2016 at 04:43 PM Report Share #593582 Posted February 16, 2016 at 04:43 PM Só tens esse código a interagir com esse ficheiro ? Se sim, a tua BD não estará a aceder ao ficheiro ? Link to comment Share on other sites More sharing options...
Ricardo Goncalves Posted February 16, 2016 at 05:04 PM Author Report Share #593584 Posted February 16, 2016 at 05:04 PM Boas He B Temy, Sim só o código é que esta a mexer no ficheiro, e não a bd não usa o ficheiro nem sabe da existência do mesmo. Sendo que o ficheiro após ser usado é renomeado. Link to comment Share on other sites More sharing options...
He B TeMy Posted February 16, 2016 at 05:29 PM Report Share #593587 Posted February 16, 2016 at 05:29 PM Tu estás a aceder a "C:\teste\teste_cliente.txt" cada vez que entras no loop, só que no final desse loop estás a renomear o ficheiro como disseste, o que a meu ver fará com que "C:\teste\teste_cliente.txt" não exista, no entanto estás a ter um erro de acesso e não de FileNotFound ... já tentas-te fazer debug e ver o valor que está a ser passado ? E se o "C:\teste\teste_cliente.txt" existe mesmo ? Link to comment Share on other sites More sharing options...
Ricardo Goncalves Posted February 17, 2016 at 11:25 AM Author Report Share #593622 Posted February 17, 2016 at 11:25 AM (edited) Boas He B TeMy já tentas-te fazer debug e ver o valor que está a ser passado Se colocar um breakpoint na linha onde está a dar o erro, como a aplicação pára no breakpoint sempre que faço o continue ele funciona bem. ou seja eu penso que o erro esta no facto de a aplicação nunca largar o caminho "C:\teste\teste_cliente.txt", assim que ele o apanha a primeira vez nunca mais larga sendo que como estou a usar a função ReadAllLines ele está a abrir e a fechar o ficheiro mas existe algo que está a bloquear. E se o "C:\teste\teste_cliente.txt" existe mesmo O erro ocorre assim que eu coloco o ficheiro na pasta pela segunda vez. Edited February 17, 2016 at 11:26 AM by Ricardo Goncalves Link to comment Share on other sites More sharing options...
He B TeMy Posted February 17, 2016 at 02:21 PM Report Share #593624 Posted February 17, 2016 at 02:21 PM (edited) Tens a certeza que é só um thread que executa esse código? Experimenta fazeres o File.ReadAllLines(fileName) fora do loop, tipo: Dim filetext() as String = File.ReadAllText(filename) For each... O erro ocorre assim que eu coloco o ficheiro na pasta pela segunda vez. O que queres dizer com isto? Onde está o código que colocas o ficheiro outra vez? Provavelmente já sei qual é o problema, se estás a usar outro thread para colocar o ficheiro/manualmente (espero que não) , esse código se estiver a executar sempre, a chamada para o File.Exists irá funcionar logo que exista um ficheiro naquele caminho, não significa que ele já tenha acabado de ser escrito (conteúdo, etc) , logo, causa-te esse erro. Eu perguntei antes se tinhas algum código ou outra coisa a interagir com esse ficheiro, o que de certeza que tens. Edited February 17, 2016 at 02:22 PM by He B TeMy Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now