首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

究竟什么方案是完美解决访问局域网文件的?

2012-10-31 
到底什么方案是完美解决访问局域网文件的??!!!!!有个windows服务,需要监控局域网中很多文件。(具体要访问的

到底什么方案是完美解决访问局域网文件的??!!!!!
有个windows服务,需要监控局域网中很多文件。(具体要访问的主机和文件在配置文件中随时更改)。
请问使用什么方法实现?

我使用了 ManagementScope 和 IO.fileinfo

Public Shared Function GetfileName(ByVal host As String, ByVal userName As String, ByVal passWord As String, ByVal filePath As String) As String

  Dim conn As ConnectionOptions = New ConnectionOptions()
  Dim ManagementPath As String = "\\" + host + "\root" & _
  "\cimv2:LogicalDisk"
  conn.Username = userName
  conn.Password = passWord

  Dim ms As ManagementScope = New ManagementScope(ManagementPath, conn)
  ms.Connect()

  Dim ff As FileInfo = New FileInfo(filePath)

  Return String.Format(ff.LastAccessTime, "yyyy-MM-dd HH:mm:ss")


  End Function


调用使用

Dim bbb As String = Win32DiskManager.GetfileName("192.168.0.1", "administrator", "wf1c5d", "\\192.168.0.1\E$\IIS_Log\W3SVC3000\ex120501.log")


但这样执行到  

Dim ff As FileInfo = New FileInfo(filePath)
就会报用户名密码错


但如果在这个机器上,首先cmd 访问以下 \\192.168.0.1 就可以过去了

说明还是有文件访问的权限没开通。但如果这个服务器重启了,就必须再访问以下 \\192.168.0.1

否则用一个新的IP地址,肯定还会出这种问题。


求一个完美解决方案。

[解决办法]
局域网访问必须先登录到那台机器,你不如做一个socket的cs结构系统
[解决办法]
用登陆映射法,cmd命令执行。如果只能这样就这样做,否则建议使用其他传输方法。
更好的构架是使用一个服务器扫描和分发文件。
以下是cmd代码:

C# code
    public class ClassConnWin    {        public string path { get; set; }        public string user { get; set; }        public string pass { get; set; }        public string linkFile()        {            if (path != "" && user != "" && pass != "")            {                System.Diagnostics.Process process = new System.Diagnostics.Process();//创建进程对象                System.Diagnostics.ProcessStartInfo startinfo = new System.Diagnostics.ProcessStartInfo();//创建进程时使用的一组值,如下面的属性                startinfo.FileName = "cmd.exe";//设定需要执行的命令程序                //以下是隐藏cmd窗口的方法                startinfo.Arguments = "/c" + @"Net Use " + path + " " + pass + " /user:" + user;//设定参数,要输入到命令程序的字符,其中"/c"表示执行完命令后马上退出                startinfo.UseShellExecute = false;      //不使用系统外壳程序启动                startinfo.RedirectStandardInput = false;//不重定向输入                startinfo.RedirectStandardOutput = true;//重定向输出,而不是默认的显示在dos控制台上                startinfo.CreateNoWindow = true;        //不创建窗口                process.StartInfo = startinfo;                string output = "";                try                {                    if (process.Start())        //开始进程                    {                        process.WaitForExit();                        output = process.StandardOutput.ReadToEnd();//读取进程的输出                    }                }                catch (Exception e)                {                    return e.ToString();                    //Console.WriteLine(e.ToString());                }                finally                {                    if (process != null)                    {                        process.Close();                    }                }                return path;            }            else            {                return "路径、用户名或密码错误";            }        }        public void KillLink()        {            System.Diagnostics.Process process = new System.Diagnostics.Process();//创建进程对象            System.Diagnostics.ProcessStartInfo startinfo = new System.Diagnostics.ProcessStartInfo();//创建进程时使用的一组值,如下面的属性            startinfo.FileName = "cmd.exe";//设定需要执行的命令程序            //以下是隐藏cmd窗口的方法            startinfo.Arguments = "/c" + @"Net Use /delete * /yes";//设定参数,要输入到命令程序的字符,其中"/c"表示执行完命令后马上退出            startinfo.UseShellExecute = false;      //不使用系统外壳程序启动            startinfo.RedirectStandardInput = false;//不重定向输入            startinfo.RedirectStandardOutput = true;//重定向输出,而不是默认的显示在dos控制台上            startinfo.CreateNoWindow = true;        //不创建窗口            process.StartInfo = startinfo;            string output = "";            try            {                if (process.Start())        //开始进程                {                    process.WaitForExit();                    output = process.StandardOutput.ReadToEnd();//读取进程的输出                }            }            catch (Exception e)            {                //Console.WriteLine(e.ToString());            }            finally            {                if (process != null)                {                    process.Close();                }            }        }    } 

热点排行