我的C#应用程序为实现filewatcher的以下代码抛出System.IO.IOExcepton(目录名无效):
public void OnChanged(object source, FileSystemEventArgs e)
{
DirectoryInfo dList = new DirectoryInfo(e.FullPath);
FileInfo[] TxtFiles = dList.GetFiles("*.TXT");
}
e.FullPath
是“C:/ Documents and Settings / Bi / Application Data / TestApp / Reports \\ 0MA01P62240_000005798__TRI__4947712701738551.TXT”。
如果您发现它跟踪文件时似乎在路径上附加了“\\”。知道问题可能是什么?
答案 0 :(得分:6)
路径C:/Documents and Settings/Bi/Application Data/TestApp/Reports\\0MA01P62240_000005798_TRI_4947712701738551.TXT
不是目录名,而是文件名。这就是它说目录名无效的原因。
使用Path.GetDirectoryName获取实际目录,如:
string directoryName = Path.GetDirectoryName(e.FullPath);
FileSystemWatcher
正在给你一条带有正斜杠的路径,这也很奇怪;我无法与你所看到的东西争论,但那些真的应该是反斜杠。您可能需要检查Path
的{{1}}属性,以查看该路径是否为硬编码。
答案 1 :(得分:4)
这会产生同样的问题吗?
FileInfo fi = new FileInfo(e.FullPath);
DirectoryInfo di = fi.Directory;
FileInfo[] TxtFiles = di.GetFiles("*.TXT");
答案 2 :(得分:0)
事件确实有错误的价值,这很奇怪。当然你可以用“/”替换“\”,但这不是最好的方法。我想你最好告诉我们你是如何触发事件的。你知道除非你自己传递这个值,否则C#几乎不可能给出错误的事件参数。