我不断收到一个 IOException ,它无法访问该文件,因为它正被另一个进程使用。我想要做的是每次我正在查看的文件都被更改..它通过 TCP/IP 将其作为数组发送。我找不到任何关闭 XDocument 的方法,只是不知道如何解决这个错误……我用谷歌搜索,仍然找不到任何东西。任何帮助将不胜感激
编辑:我找到了文件阅读器和其他东西的其他解决方案..但使用 xdocument 时似乎有所不同
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