Ir para o conteúdo
Ricardo Goncalves

Drop Localização e Nome de ficheiro

Mensagens Recomendadas

Ricardo Goncalves

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

Editado por Ricardo Goncalves

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ricardo Goncalves

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
He B TeMy

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 ?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ricardo Goncalves

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.

Editado por Ricardo Goncalves

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
He B TeMy

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.

Editado por He B TeMy

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.