我不断收到一个IOException,它无法访问该文件,因为它正被另一个进程使用。我想做的是每次我查看的文件都会被更改。。它通过TCP/IP以数组的形式发送。我找不到任何关闭XDocument的方法,只是不知道如何修复这个错误。。。我用谷歌搜索了一下,但还是什么都找不到。任何帮助都将不胜感激
编辑:我发现了其他的解决方案与fileereader和其他东西...但它似乎不同,当使用xfile
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//filesystemwatcher
using System.IO;
//tcpip server
using System.Net;
using System.Net.Sockets;
//XML
using System.Xml;
using System.Xml.Linq;
namespace ChampSelect_FileWatcher
{
class Program
{
//TCP IP variables
public static Int32 port;
public static IPAddress localAddr;
public static TcpListener server;
public static TcpClient client;
public static NetworkStream stream;
public static XDocument doc;
public static void Main(string[] args)
{
//LOAD XML FILE
doc = XDocument.Load("C:/Trio Scripts/example.xml");
//OBSERVE FILE
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"C:\Trio Scripts";
watcher.Filter = "example.xml";
//watch for changes in LastWrite
watcher.NotifyFilter = NotifyFilters.LastWrite;
//event handler
watcher.Changed += new FileSystemEventHandler(OnChanged);
//Begin watching
watcher.EnableRaisingEvents = true;
//TCP IP SERVER
try
{
Console.WriteLine("Waiting for 99150 to run...\n");
//config TCP stuff
port = 9905;
localAddr = IPAddress.Parse("10.0.0.66");
server = new TcpListener(localAddr, port);
server.Start();
client = server.AcceptTcpClient();
stream = client.GetStream();
Console.WriteLine("Connection to Viz successful!");
Console.WriteLine("***LISTENING FOR CHANGES TO: " + watcher.Filter + "***\n");
}
catch (SocketException z)
{
Console.WriteLine("SocketException: {0}", z);
}
//prevent console from closing
Console.ReadKey();
Console.ReadKey();
Console.ReadKey();
}
// Define the event handlers.
private static void OnChanged(object source, FileSystemEventArgs e)
{
//reload xml file
//doc = XDocument.Load("C:/Trio Scripts/example.xml");
//doc.Root.ReplaceWith(XElement.Load("C:/Trio Scripts/example.xml"));
XDocument doc;
using (var reader = XmlReader.Create("C:/Trio Scripts/example.xml"))
{
doc = XDocument.Load(reader);
}
// Nodes in XML
string[] bans = doc.Descendants("ban").OrderBy(element => Int32.Parse(element.Attribute("order").Value)).Select(element => element.Value).ToArray();
// String to send the message on
String sendMsg = "";
// Proceed with reading XML
for (int i = 0; i < bans.Length; i++)
sendMsg += bans[i] + " ";
byte[] msg = System.Text.Encoding.ASCII.GetBytes(sendMsg);
stream.Write(msg, 0, msg.Length);
Console.WriteLine("Change detected, sending changes to Viz");
sendMsg = "";
}
}//end class
}//end namespace
您仍然可以使用X文档
和XmlReader
:
XDocument doc;
using (var reader = XmlReader.Create("C:/Trio Scripts/example.xml"))
{
doc = XDocument.Load(reader);
}
当读取器使用块的
完成时,应该关闭文件句柄。
更新:
可能是
XmlReader的行为。Create(string)
不会以最简单的方式打开文件。如果这就是导致异常的原因,请尝试以下更明确的代码来指定文件权限:
XDocument doc;
using (var stream = File.Open("C:/Trio Scripts/example.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var reader = XmlReader.Create(stream))
{
doc = XDocument.Load(reader);
}
问题是,每当文件发生更改时,就会出现多个更改事件。
在读取更改的文件之前,您应该等待一段时间。
您还应该使用e.FullPath
并检查
e.ChangeType == WatcherChangeTypes.Changed
如果无法打开文件,请稍后再试。
这意味着什么,我能做什么呢?
我正在尝试测试我自己的antiweb版本,可以在这里找到。但是,我正在使用Pythons单元测试模块对其进行测试。代码如下: 除了功能外,所有功能都正常工作。在执行unittest时,如果不拆下,temp文件夹及其内容将被完美创建。但是使用功能,我得到一个错误: 当我再看临时文件夹时,文件夹本身仍然在那里,但现在是空的。这将是太多,包括我的反网络文件在这里,所以我有它在这里再次链接,如果你需要它。
我的代码用于查看文件夹并删除分辨率为1920x1080的图像的脚本。我遇到的问题是,当我的代码运行时; 我收到以下错误消息: 我想确认一下,Python是我电脑上唯一运行的程序。导致此问题的原因是什么?如何解决?
当我试图删除一个文件时,它说我的服务器正在使用它,所以我尝试使用(Image img=Image.FromFile(imgFilePath))实现一个,但随后我得到了
我正在测试一个python代码,它将文件从源路径移动到目标路径。测试是使用Python3中的pytest完成的。但我在这里面临着一个障碍。就是这样,我试图在代码结束时删除源路径和目标路径。为此,我使用了类似shutil的命令。rmtree(路径)或操作系统。rmdir(路径)。这导致了错误-“[WinError 32]该进程无法访问该文件,因为它正被另一进程使用”。请帮我做这个。下面是python
我正在使用python 2,并且已经阅读了关于这个错误的几篇文章,即(这篇文章)。然而,我仍然得到错误。我所做的是:我读取目录中的文件,如果其中任何文件包含特定的字符串,我就删除目录。 然后我得到错误: 我也尝试过使用绝对路径: 然后我会得到: 如果我一次删除一个文件,使用相同的绝对路径和操作系统。删除(“”),我不会有问题。如果我试图使用select_poo()和shutil同时删除所有文件。r