Jump to content

Drop Localização e Nome de ficheiro


Ricardo Goncalves

Recommended Posts

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 by Ricardo Goncalves
Link to comment
Share on other sites

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

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 by Ricardo Goncalves
Link to comment
Share on other sites

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 by He B TeMy
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.