여기 내 코드의 목적은 xml 파일의 폴더를 모니터링하는 것입니다. 파일이 폴더에 저장되면, 읽히고 byte []로 변환되며, 소켓을 통해 서버로 보내지고 삭제됩니다.삭제시 파일 액세스 오류
이전에 보내지 않은 파일이 폴더에있는 경우에만 작동합니다.
예 : 1.xml을 보내면 모든 것이 잘 작동하고 파일이 삭제됩니다. 1.xml을 폴더에 붙여 넣습니다. 파일이 읽히지 만 삭제할 때 다른
프로세스에서 사용하는 예외가 발생합니다.
길거나 다른 파일 이름을 기다리는 경우 정상적으로 작동합니다. 지연 (3 초 이상 작동 함)을 추가 할 수는 있지만 프로그램의 목적에 어긋납니다.
파이썬에서이 동일한 코드를 작성 했으므로 잘 작동하므로 문제가 발생합니다. 아래 코드를 참조하십시오. 어떤 도움을 주셔서 감사합니다!
string[] files;
while (sending)
{
files = Directory.GetFiles(Events_Directory, "*.xml");
foreach(string file in files)
{
Message = System.Text.UTF8Encoding.ASCII.GetBytes(Regex.Replace(
File.ReadAllText(file), @"[\r\n\t ]+", ""));
Thread.Sleep(500);
Sock.Send(Message);
File.Delete(file);
}
}
나는 그것을 시도했다. 사실, 처음에는 StreamReader를 사용했지만 열기/닫기 오류를 피하기 위해 File.ReadAllText로갔습니다. 코드를 단계별로 실행할 때 파일이 두 번째로 삭제 될 때까지 예외가 throw되지 않습니다. –
파일을 두 번째로 삭제한다는 것은 무엇을 의미합니까? 삭제 요청은 1 건입니다. – Broom
반복됩니다. 보내는 = True라고 가정합니다. 그래서 보내기가 True (사용자가 제어) 인 동안 xml 파일의 해당 폴더 "Events_Directory"를 모니터링합니다. "1.xml"파일을 폴더에 붙여 넣으면 삭제를 포함하여 모든 작업이 올바르게 수행됩니다. 자, 여전히 그 루프에있는 동안 동일한 파일 "1.xml"을 붙이면 삭제 요청에 도달하면 예외가 발생합니다 (두 번째). 더 나은 설명이 되었기를 바랍니다. –