- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Erro 516 ao apagar ou renomear um arquivo .txt
×
Linguagem de Programação ADVPL
Perguntas Erro 516 ao apagar ou renomear um arquivo .txt
- marceloc
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 43
- Obrigados Recebidos: 0
10 anos 4 meses atrás #23812
por marceloc
Erro 516 ao apagar ou renomear um arquivo .txt foi criado por marceloc
Boa Tarde,
Estou com a seguinte situação.
Abro um arquivo txt e importo os dados para o protheus com rotina automático (especificamente apontamento de produção - módulo estoque).
Fecho o arquivo, mas necessito apagar o mesmo, mas ao tentar apagar com FErase apresenta o erro 516(The process cannot access the file because it is being used by another process.).
Fecho o arquivo com fClose(nHandle) e não da certo.
Já não sei mais o que fazer, alguém ja passou por isso?
Obrigado!
Estou com a seguinte situação.
Abro um arquivo txt e importo os dados para o protheus com rotina automático (especificamente apontamento de produção - módulo estoque).
Fecho o arquivo, mas necessito apagar o mesmo, mas ao tentar apagar com FErase apresenta o erro 516(The process cannot access the file because it is being used by another process.).
Fecho o arquivo com fClose(nHandle) e não da certo.
Já não sei mais o que fazer, alguém ja passou por isso?
Obrigado!
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
10 anos 3 meses atrás #23822
por kanaamlrr
Respondido por kanaamlrr no tópico Erro 516 ao apagar ou renomear um arquivo .txt
Tente utilizar o FOpen(nHandle,0)
Dessa forma você abre ele como somente leitura e não bloqueia o arquivo.
Verifique também que não tem nenhuma outra rotina travando esse arquivo.
Caso não funcione, tente mudar para a linha do FT_FUse, quando você terminar de processar o arquivo, utilize o comando FT_FUse() que ele irá liberar o arquivo, ai você pode dar um FErase() sem problemas...
Abraço!
Dessa forma você abre ele como somente leitura e não bloqueia o arquivo.
Verifique também que não tem nenhuma outra rotina travando esse arquivo.
Caso não funcione, tente mudar para a linha do FT_FUse, quando você terminar de processar o arquivo, utilize o comando FT_FUse() que ele irá liberar o arquivo, ai você pode dar um FErase() sem problemas...
Abraço!
Por favor Acessar ou Registrar para participar da conversa.
- marceloc
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 43
- Obrigados Recebidos: 0
10 anos 3 meses atrás #23855
por marceloc
Respondido por marceloc no tópico Erro 516 ao apagar ou renomear um arquivo .txt
Bom dia,
Kanaãm, não deu certo. Fiz os passos que você informou e nada.
Segue trecho do fonte para quem quiser ver.
Abraço,
Local nHandle
Local aDosagem := {}
Local aDadosOP := {}
Local aFiles := {}
Local nX
Local aSD4 := {}
Local cDosagem := ""
aFiles := Directory("D:\temp\*.txt", "D")
For nX := 1 to Len( aFiles )
If SubStr(aFiles[nX,1],1,2) == "OP"
MsgStop(aFiles[nX,1])
cFOpen := "D:\Temp\" + aFiles[nX,1]
EndIf
Next nX
FT_FUse(cFOpen)
FT_FGoTop()
While !FT_FEof()
cLinha := FT_FReadln()
If SubStr(cLinha,1,7) == "DOSAGEM"
AADD(aDosagem,{SEPARA(cLinha,";",.T.)})
cDosagem += SubStr(cLinha,21,7)
ElseIf SubStr(cLinha,1,2) == "OP"
aDadosOP := SEPARA(cLinha,";",.T.)
EndIf
FT_FSkip()
EndDo
//Fecha o Arquivo TXT
FT_FUse()
cQuery := " SELECT D4_COD, D4_OP FROM "+ RetSqlName("SD4") +" SD4 "
cQuery += " WHERE SD4.D_E_L_E_T_ != '*' "
cQuery += " AND D4_FILIAL = '"+ xFilial("SD4") +"' AND D4_OP = '"+ aDadosOp[2] +"' "
If Select("QRYSD4") <> 0
QRYSD4->(dbCloseArea())
EndIf
dbUseArea (.T., "TOPCONN", TCGenQry(,,cQuery),"QRYSD4",.T.,.T.)
While QRYSD4->(!EOF())
aadd(aSD4,{Alltrim(QRYSD4->D4_COD),Alltrim(QRYSD4->D4_OP)})
QRYSD4->(dbSkip())
EndDo
dbSelectArea("SD4")
SD4->(dbSetOrder(2)) //D4_FILIAL + D4_OP + D4_COD + D4_LOCAL
dbSelectArea("SB2")
SB2->(dbSetOrder(1)) //B2_FILIAL + B2_COD + B2_LOCAL
dbSelectArea("SB1")
SB1->(dbSetOrder(1)) //B1_FILIAL + B1_COD
For i := 1 To Len(aSD4)
If SB1->(dbSeek(xFilial("SB1") + Padr(aSD4[i,1],TamSx3("B1_COD")[1])))
cArmazem := SB1->B1_LOCPAD
EndIf
If !aSD4[i,1] $ cDosagem
dbSelectArea("SD4")
SD4->(dbSelectArea(2)) //D4_FILIAL + D4_OP + D4_COD + D4_LOCAL
If SD4->(dbSeek(xFilial("SD4") + Padr(aSD4[i,2],TamSx3("D4_OP")[1]) + Padr(aSD4[i,1],TamSx3("D4_COD")[1]) + cArmazem ))
//Apaga o resitro que não existe na SD4
RecLock("SD4",.F.)
dbDelete()
SD4->(MsUnLock())
EndIf
EndIf
Next
For i := 1 To Len(aDosagem)
If SB1->(dbSeek(xFilial("SB1") + Padr(aDosagem[1][3],TamSx3("B1_COD")[1])))
cArmazem := SB1->B1_LOCPAD
EndIf
// Posiciona na tabela SD4 - Requisições Empenhadas
If SD4->(dbSeek(xFilial("SD4") + Padr(aDosagem[1][2],TamSx3("D4_OP")[1]) + Padr(aDosagem[1][3],TamSx3("D4_COD")[1]) + cArmazem ))
nDif := 0
nDif := Val(aDosagem[1][4]) - SD4->D4_QUANT
//Atualiza registro posicionado na SD4
RecLock("SD4",.F.)
SD4->D4_QTDEORI := Val(aDosagem[1][4])
SD4->D4_QUANT := Val(aDosagem[1][4])
SD4->(MsUnLock())
Else
nDif := 0
nDif := Val("-"+aDosagem[1][4])
//Inclui Registro novo na SD4
RecLock("SD4",.T.)
SD4->D4_FILIAL := xFilial("SD4")
SD4->D4_OP := aDosagem[i,1,2]
SD4->D4_COD := aDosagem[i,1,3]
SD4->D4_DATA := date()
SD4->D4_LOCAL := cArmazem
SD4->D4_QTDEORI := Val(aDosagem[1][4])
SD4->D4_QUANT := Val(aDosagem[1][4])
SD4->(MsUnLock())
EndIf
// Posiciona na tabela SB2 - Saldos Físico e Financeiro
If SB2->(dbSeek(xFilial("SB2") + Padr(aDosagem[1][3],TamSx3("B2_COD")[1]) + cArmazem ))
nResto := 0
nResto := SB2->B2_QEMP + (nDif)
//Atualiza registro na SB2
RecLock("SB2",.F.)
SB2->B2_QEMP := nResto
SB2->(MsUnLock())
EndIf
Next
//Rotina automatica para a inclusão do apontamento de produção
lRet := U_RMATA250(aDadosOP)
//Exclui o arquivo
If lRet
IF FERASE(cFOpen) == -1
MsgStop('Falha ao deletar o Arquivo ( FError'+str(FError(),4)+ ')')
Else
MsgStop('Arquivo deletado com sucesso.')
ENDIF
EndIf
Kanaãm, não deu certo. Fiz os passos que você informou e nada.
Segue trecho do fonte para quem quiser ver.
Abraço,
Local nHandle
Local aDosagem := {}
Local aDadosOP := {}
Local aFiles := {}
Local nX
Local aSD4 := {}
Local cDosagem := ""
aFiles := Directory("D:\temp\*.txt", "D")
For nX := 1 to Len( aFiles )
If SubStr(aFiles[nX,1],1,2) == "OP"
MsgStop(aFiles[nX,1])
cFOpen := "D:\Temp\" + aFiles[nX,1]
EndIf
Next nX
FT_FUse(cFOpen)
FT_FGoTop()
While !FT_FEof()
cLinha := FT_FReadln()
If SubStr(cLinha,1,7) == "DOSAGEM"
AADD(aDosagem,{SEPARA(cLinha,";",.T.)})
cDosagem += SubStr(cLinha,21,7)
ElseIf SubStr(cLinha,1,2) == "OP"
aDadosOP := SEPARA(cLinha,";",.T.)
EndIf
FT_FSkip()
EndDo
//Fecha o Arquivo TXT
FT_FUse()
cQuery := " SELECT D4_COD, D4_OP FROM "+ RetSqlName("SD4") +" SD4 "
cQuery += " WHERE SD4.D_E_L_E_T_ != '*' "
cQuery += " AND D4_FILIAL = '"+ xFilial("SD4") +"' AND D4_OP = '"+ aDadosOp[2] +"' "
If Select("QRYSD4") <> 0
QRYSD4->(dbCloseArea())
EndIf
dbUseArea (.T., "TOPCONN", TCGenQry(,,cQuery),"QRYSD4",.T.,.T.)
While QRYSD4->(!EOF())
aadd(aSD4,{Alltrim(QRYSD4->D4_COD),Alltrim(QRYSD4->D4_OP)})
QRYSD4->(dbSkip())
EndDo
dbSelectArea("SD4")
SD4->(dbSetOrder(2)) //D4_FILIAL + D4_OP + D4_COD + D4_LOCAL
dbSelectArea("SB2")
SB2->(dbSetOrder(1)) //B2_FILIAL + B2_COD + B2_LOCAL
dbSelectArea("SB1")
SB1->(dbSetOrder(1)) //B1_FILIAL + B1_COD
For i := 1 To Len(aSD4)
If SB1->(dbSeek(xFilial("SB1") + Padr(aSD4[i,1],TamSx3("B1_COD")[1])))
cArmazem := SB1->B1_LOCPAD
EndIf
If !aSD4[i,1] $ cDosagem
dbSelectArea("SD4")
SD4->(dbSelectArea(2)) //D4_FILIAL + D4_OP + D4_COD + D4_LOCAL
If SD4->(dbSeek(xFilial("SD4") + Padr(aSD4[i,2],TamSx3("D4_OP")[1]) + Padr(aSD4[i,1],TamSx3("D4_COD")[1]) + cArmazem ))
//Apaga o resitro que não existe na SD4
RecLock("SD4",.F.)
dbDelete()
SD4->(MsUnLock())
EndIf
EndIf
Next
For i := 1 To Len(aDosagem)
If SB1->(dbSeek(xFilial("SB1") + Padr(aDosagem[1][3],TamSx3("B1_COD")[1])))
cArmazem := SB1->B1_LOCPAD
EndIf
// Posiciona na tabela SD4 - Requisições Empenhadas
If SD4->(dbSeek(xFilial("SD4") + Padr(aDosagem[1][2],TamSx3("D4_OP")[1]) + Padr(aDosagem[1][3],TamSx3("D4_COD")[1]) + cArmazem ))
nDif := 0
nDif := Val(aDosagem[1][4]) - SD4->D4_QUANT
//Atualiza registro posicionado na SD4
RecLock("SD4",.F.)
SD4->D4_QTDEORI := Val(aDosagem[1][4])
SD4->D4_QUANT := Val(aDosagem[1][4])
SD4->(MsUnLock())
Else
nDif := 0
nDif := Val("-"+aDosagem[1][4])
//Inclui Registro novo na SD4
RecLock("SD4",.T.)
SD4->D4_FILIAL := xFilial("SD4")
SD4->D4_OP := aDosagem[i,1,2]
SD4->D4_COD := aDosagem[i,1,3]
SD4->D4_DATA := date()
SD4->D4_LOCAL := cArmazem
SD4->D4_QTDEORI := Val(aDosagem[1][4])
SD4->D4_QUANT := Val(aDosagem[1][4])
SD4->(MsUnLock())
EndIf
// Posiciona na tabela SB2 - Saldos Físico e Financeiro
If SB2->(dbSeek(xFilial("SB2") + Padr(aDosagem[1][3],TamSx3("B2_COD")[1]) + cArmazem ))
nResto := 0
nResto := SB2->B2_QEMP + (nDif)
//Atualiza registro na SB2
RecLock("SB2",.F.)
SB2->B2_QEMP := nResto
SB2->(MsUnLock())
EndIf
Next
//Rotina automatica para a inclusão do apontamento de produção
lRet := U_RMATA250(aDadosOP)
//Exclui o arquivo
If lRet
IF FERASE(cFOpen) == -1
MsgStop('Falha ao deletar o Arquivo ( FError'+str(FError(),4)+ ')')
Else
MsgStop('Arquivo deletado com sucesso.')
ENDIF
EndIf
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
10 anos 3 meses atrás #23858
por kanaamlrr
Respondido por kanaamlrr no tópico Erro 516 ao apagar ou renomear um arquivo .txt
Cara, faz um teste,
Tenta executar o comando de apagar o arquivo antes de executar o comando de abrir.
Se ele conseguir apagar, é seu fonte que está travando o arquivo, caso contrário, tem alguma falha de permissão de usuário ou sistema.
Tenta executar o comando de apagar o arquivo antes de executar o comando de abrir.
Se ele conseguir apagar, é seu fonte que está travando o arquivo, caso contrário, tem alguma falha de permissão de usuário ou sistema.
Por favor Acessar ou Registrar para participar da conversa.
- marceloc
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 43
- Obrigados Recebidos: 0
10 anos 3 meses atrás #23861
por marceloc
Respondido por marceloc no tópico Erro 516 ao apagar ou renomear um arquivo .txt
Boa tarde,
Consegui apagar o arquivo antes de abri-lo.
Agora só falta descobrir o que pode estar travando o arquivo depois que o mesmo é aberto.
Mesmo eu colocando o FERASE() logo após fechar o arquivo com FT_FUSE(), não consigo apaga-lo.
Consegui apagar o arquivo antes de abri-lo.
Agora só falta descobrir o que pode estar travando o arquivo depois que o mesmo é aberto.
Mesmo eu colocando o FERASE() logo após fechar o arquivo com FT_FUSE(), não consigo apaga-lo.
Por favor Acessar ou Registrar para participar da conversa.
- admin
- Desconectado
- Administrador
Menos
Mais
- Postagens: 216
- Obrigados Recebidos: 0
10 anos 3 meses atrás - 10 anos 3 meses atrás #23865
por admin
Respondido por admin no tópico Erro 516 ao apagar ou renomear um arquivo .txt
Veja se Funfa
nHandle := FT_FUse(cFOpen)
FT_FGoTop()
While !FT_FEof()
cLinha := FT_FReadln()
If SubStr(cLinha,1,7) == "DOSAGEM"
AADD(aDosagem,{SEPARA(cLinha,";",.T.)})
cDosagem += SubStr(cLinha,21,7)
ElseIf SubStr(cLinha,1,2) == "OP"
aDadosOP := SEPARA(cLinha,";",.T.)
EndIf
FT_FSkip()
EndDo
//Fecha o Arquivo TXT
fClose(nHandle) //FT_FUse()
nHandle := FT_FUse(cFOpen)
FT_FGoTop()
While !FT_FEof()
cLinha := FT_FReadln()
If SubStr(cLinha,1,7) == "DOSAGEM"
AADD(aDosagem,{SEPARA(cLinha,";",.T.)})
cDosagem += SubStr(cLinha,21,7)
ElseIf SubStr(cLinha,1,2) == "OP"
aDadosOP := SEPARA(cLinha,";",.T.)
EndIf
FT_FSkip()
EndDo
//Fecha o Arquivo TXT
fClose(nHandle) //FT_FUse()
Ultima edição: 10 anos 3 meses atrás por admin.
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Erro 516 ao apagar ou renomear um arquivo .txt
Tempo para a criação da página:0.102 segundos