- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我必须监视服务器上的共享文件夹,以了解连接到网络的计算机(它的主机名)在该文件夹中发生的更改。我使用 C# 实现了对目录和文件的监视。但是,它只监视 Created、Renamed、Changed、Deleted 和 Error 事件等事件。我还需要帮助来监控访问或更改共享文件夹的计算机的主机名/IP 地址以及事件发生的时间。这是我的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
namespace a1ashiishFileSystemWatcher
{
public partial class MainForm : Form
{
public ListBoxlistBox;
public const String startMonitoring = “Start Minitoring…”;
public const String stopMonitoring = “Stop Minitoring…”;
public MainForm()
{
InitializeComponent();
//Create a listBox to show activities of all Events.
listBox = new ListBox();
listBox.FormattingEnabled = true;
listBox.Location = new System.Drawing.Point(23, 121);
listBox.Name = “listBox”;
listBox.Size = new System.Drawing.Size(571, 238);
listBox.TabIndex = 2;
this.Controls.Add(listBox);
}
private voidbutton1_Click(object sender, EventArgs e)
{
// Create FolderBrowserDialog object.
FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
// Show a button to create a new folder.
folderBrowserDialog.ShowNewFolderButton = true;
DialogResult dialogResult = folderBrowserDialog.ShowDialog();
// Get selected path from FolderBrowserDialog control.
if (dialogResult == DialogResult.OK)
{
textBox1.Text = folderBrowserDialog.SelectedPath;
Environment.SpecialFolderroot = folderBrowserDialog.RootFolder;
}
}
private voidbutton2_Click(object sender, EventArgs e)
{
// Create a new FileSystemWatcher object.
FileSystemWatcher fsWatcher = new FileSystemWatcher();
switch (button2.Text)
{
// Start Monitoring…
case startMonitoring:
if (!textBox1.Text.Equals(String.Empty))
{
listBox.Items.Add(“Started FileSystemWatcher Service…”);
fsWatcher.Path = textBox1.Text;
// Set Filter.
fsWatcher.Filter = (textBox2.Text.Equals(String.Empty)) ? “*.*” : textBox2.Text;
// Monitor files and subdirectories.
fsWatcher.IncludeSubdirectories = true;
// Monitor all changes specified in the NotifyFilters.
fsWatcher.NotifyFilter = NotifyFilters.Attributes |
NotifyFilters.CreationTime |
NotifyFilters.DirectoryName |
NotifyFilters.FileName |
NotifyFilters.LastAccess |
NotifyFilters.LastWrite |
NotifyFilters.Security |
NotifyFilters.Size;
fsWatcher.EnableRaisingEvents = true;
// Raise Event handlers.
fsWatcher.Changed += new FileSystemEventHandler(OnChanged);
fsWatcher.Created += new FileSystemEventHandler(OnCreated);
fsWatcher.Deleted += new FileSystemEventHandler(OnDeleted);
fsWatcher.Renamed += new RenamedEventHandler(OnRenamed);
fsWatcher.Error += new ErrorEventHandler(OnError);
button2.Text = stopMonitoring;
textBox1.Enabled = false;
textBox2.Enabled = false;
}
else
{
listBox.Items.Add(“Please select folder to monitor….”);
}
break;
// Stop Monitoring…
case stopMonitoring:
default:
fsWatcher.EnableRaisingEvents = false;
fsWatcher = null;
button2.Text = startMonitoring;
textBox1.Enabled = true;
textBox2.Enabled = true;
listBox.Items.Add(“Stopped FileSystemWatcher Service…”);
break;
}
}
// FileSystemWatcher – OnCreated Event Handler
public voidOnCreated(object sender, FileSystemEventArgs e)
{
// Add event details in listbox.
this.Invoke((MethodInvoker)delegate { listBox.Items.Add(String.Format(“Path : “{0}” || Action : {1}”, e.FullPath, e.ChangeType)); });
}
// FileSystemWatcher – OnChanged Event Handler
public voidOnChanged(object sender, FileSystemEventArgs e)
{
// Add event details in listbox.
this.Invoke((MethodInvoker)delegate { listBox.Items.Add(String.Format(“Path : “{0}” || Action : {1}”, e.FullPath, e.ChangeType)); });
}
// FileSystemWatcher – OnRenamed Event Handler
public voidOnRenamed(object sender, RenamedEventArgs e)
{
// Add event details in listbox.
this.Invoke((MethodInvoker)delegate { listBox.Items.Add(String.Format(“Path : “{0}” || Action : {1} to “{2}””, e.FullPath, e.ChangeType, e.Name)); });
}
// FileSystemWatcher – OnDeleted Event Handler
public voidOnDeleted(object sender, FileSystemEventArgs e)
{
// Add event details in listbox.
this.Invoke((MethodInvoker)delegate { listBox.Items.Add(String.Format(“Path : “{0}” || Action : {1}”, e.FullPath, e.ChangeType)); });
}
// FileSystemWatcher – OnError Event Handler
public void OnError(object sender, ErrorEventArgse)
{
// Add event details in listbox.
this.Invoke((MethodInvoker)delegate { listBox.Items.Add(String.Format(“Error : {0}”, e.GetException().Message)); });
}
}
}
我已经尝试过这种方法,但我仍然无法获取主机名。请帮助我哪里出错了。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace MonitorShare
{
public partial class Monitor : ServiceBase
{
public Monitor()
{
InitializeComponent();
string dDirectory = @"E:\SharedFolder\Shares";
DirectoryInfo info = new DirectoryInfo(dDirectory);
string[] filePath = Directory.GetFiles(dDirectory, "*.*");
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.BeginInit();
watcher.filePath = dDirectory;
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite |
NotifyFilters.FileName | NotifyFilters.DirectoryName;
watcher.Changed += new FileSystemEventHandler(watcher_Changed);
watcher.Created += new FileSystemEventHandler(watcher_Created);
watcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
watcher.Filter = "*.*";
watcher.EnableRaisingEvents = true;
watcher.EndInit();
}
protected void watcher_Deleted(object sender, FileSystemEventArgs e)
{
var process = new Process();
process.StartInfo.FileName = "openfiles.exe";
process.StartInfo.Arguments = "/query /FO CSV /v";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
try
{
process.Start();
if ((process.StandardOutput != null))
{
var result = process.StandardOutput.ReadToEnd().Trim().Replace("\"",
"");
var lines = result.Split('\n');
var firstLineIndex = 1 + lines.Cast<string>().ToList().FindIndex(l =>
l.Contains("Hostname"));
for (var i = firstLineIndex; i < lines.Count() && firstLineIndex > 0; i
++)
{
var fields = lines[i].Split(',');
var time = DateTime.Now;
FileStream fs = new FileStream(@"C:\SFD\log.txt", FileMode.Append);
StreamWriter sw = new StreamWriter(fs);
if(firstLineIndex.ToString()=="Hostname")
{
Console.SetOut(sw);
Console.WriteLine(e.FullPath + "\t" + e.ChangeType + "\t" +
time + "\t" + e.Name + "\t" + fields[0]);
sw.Close();
}
}
}
process.WaitForExit();
}
catch (Exception ex)
{
}
finally
{
process.Close();
}
}
protected void watcher_Created(object sender, FileSystemEventArgs e)
{
var process = new Process();
process.StartInfo.FileName = "openfiles.exe";
process.StartInfo.Arguments = "/query /FO CSV /v";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
try
{
process.Start();
if ((process.StandardOutput != null))
{
var result = process.StandardOutput.ReadToEnd().Trim().Replace("\"",
"");
var lines = result.Split('\n');
var firstLineIndex = 1 + lines.Cast<string>().ToList().FindIndex(l =>
l.Contains("Hostname"));
for (var i = firstLineIndex; i < lines.Count() && firstLineIndex > 0; i
++)
{
var fields = lines[i].Split(',');
var time = DateTime.Now;
FileStream fs = new FileStream(@"C:\SFD\log.txt", FileMode.Append);
StreamWriter sw = new StreamWriter(fs);
if(firstLineIndex.ToString()=="Hostname")
{
Console.SetOut(sw);
Console.WriteLine(e.FullPath + "\t" + e.ChangeType + "\t" +
time + "\t" + e.Name + "\t" + fields[0]);
sw.Close();
}
}
}
process.WaitForExit();
}
catch (Exception ex)
{
}
finally
{
process.Close();
}
}
protected override void OnStart(string[] args)
{
}
protected override void OnStop()
{
}
}
}
最佳答案
据我所知,您可以使用 WMI至少获得与共享相关的那些。您需要引用 System.Management.dll
,创建 ManagementObjectSearcher
的实例,然后就可以了。
问题通常是找到正确的类,WMI 的引用可以在 WMI Reference 下找到.对于您的用例,您将需要 Win32_ConnectionShare类(class)。考虑到应用程序需要以管理员权限运行才能访问该类的数据。
您的用例的一些示例代码(根据上述文档,antecedent
代表服务器端,而 dependent
代表客户端):
// Create a query
SelectQuery query = new SelectQuery("SELECT * FROM Win32_ConnectionShare");
// Initialize an object searcher with this query
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
// Get the resulting collection and loop through it
foreach (ManagementObject mo in searcher.Get())
{
string antecedent = mo["antecedent"].ToString();
string dependent = mo["dependent"].ToString();
ManagementObject share = new ManagementObject(antecedent);
ManagementObject server = new ManagementObject(dependent);
Console.WriteLine(server["UserName"].ToString());
Console.WriteLine(server["ComputerName"].ToString());
Console.WriteLine(server["ShareName"].ToString());
}
关于c# - 如何知道正在更改服务器上的共享文件夹的计算机的主机名/IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47629472/
目前,我有以下设置: A记录: mydomain.com - aaa.aaa.aaa.aaa subdomain.mydomain.com - aaa.aaa.aaa.aaa NS记录: mydoma
有人可以帮助我以最佳方式在流畅的 nHibernate 中映射以下情况吗? Address 类用于 Client 和 Company。如何在 SQL 中最有效地存储它?映射应该是什么样的?我已经考虑过
我正在尝试编写一个 Windows 应用程序,它将在来自 PC 的以太网链接上生成流量。 我想使用 webBrowser 控件不断拉取网页以产生流量。 在这种情况下,我希望每个 webBrowser
我正在编写一个 SIP 堆栈,我需要在消息中插入一个 IP 地址。该地址必须是用于发送消息的地址。我知道目标 IP 并且需要确定将用于发送消息的 NIC(其地址).... 最佳答案 为了扩展 Remy
如何使用 IP 地址获取 MAC 地址,但以下代码不起作用 packet = ARP(op=ARP.who_has,psrc="some ip",pdst = ip) response = srp(p
目前我想知道如何实现对本地无线网络(路由器)的获取请求以获取当前连接到当前连接的 LAN 的所有设备.... 所以我做了一些研究,显然“nmap”是一个终端/命令提示符命令,它将连接的设备返回到本地无
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicates: how to find MAC address in MAC OS X programmatically
我们正在为 ipad 开发一个 iOS 应用程序,它使用 bonjour 与其他设备连接,使用 couchbaseListener 与对等数据库进行复制。我们观察到,每当 [nsnetservice
我创建了 3 个实例,其中 3 个弹性 IP 地址指向这些实例。 我做了 dsc 的 yum 安装:dsc12.noarch 1.2.13-1 @datastax 并且/etc/cassandra/d
我正在尝试获取规模集中所有虚拟机的私有(private) IP 地址列表(没有一个虚拟机故意拥有任何公共(public) IP 地址)。我找到了如何从 az cli 获取此内容,如下所示: az vm
我正在尝试获取规模集中所有虚拟机的私有(private) IP 地址列表(没有一个虚拟机故意拥有任何公共(public) IP 地址)。我找到了如何从 az cli 获取此内容,如下所示: az vm
我正在尝试与该端口上的任何 IP 建立连接。最初,我将其设置为 10.0.0.7,这是我网络上另一台计算机的 IP,因此我可以测试客户端/服务器。但是,我希望它可以与任何计算机一起使用而不必将 IP
作为序言,我开发了自己的 CRM(类似于 SalesForce 或 SAP),其“规模”要小得多,因为它面向服务,而不是销售。我在 Ubuntu 16.04 服务器上使用 MySql 或 MariaD
在我的项目中,我想做如下事情: static void test0(void) { printf("%s [%d]\n", __func__, __LINE__); } static void
我的机器上有两个网卡,配置了两个独立的 IP 地址。两个 IP 地址都属于同一个网络。我是否正确地说,当我创建一个特定于这些 IP 地址之一的套接字时? 更新: 这是我的情况: 我有一个位于 192.
当然,我意识到没有一种“正确的方法”来设计 SQL 数据库,但我想就我的特定场景中的优劣获得一些意见。 目前,我正在设计一个订单输入模块(带有 SQL Server 2008 的 Windows .N
我们将保存大量地址数据(在我公司的眼中,每个客户大约有150.000至500.000行)。 地址数据包含约5列: 名称1 名称2 街(+否) 邮政编码 市 也许以后再添加一些东西(例如电话,邮件等)
好的,我们在生产中实现了 Recaptcha。我们收到错误是因为它无法到达使用该服务所需的 IP 地址。我们为 IP 地址打开一个端口以到达 Google。没问题。我们这样做并显式配置该 IP 地址以
此页面使用 Drupals 联系表发送电子邮件:http://www.westlake.school.nz/contact 问题是,学校员工使用 outlook。当他们收到来自 parent 等的电子
是否可以将用户输入的邮政编码转换为文本框并将其转换为CLLocation?我正在尝试比较其当前位置与地址或邮政编码之间的距离,如果可以从NSString中创建CLLocation,这将很容易。 最佳答
我是一名优秀的程序员,十分优秀!