首先说明一下环境:2台服务器A、B,在一个局域网内,B备份用的,两台都是Win Server2003,其中B是英文的系统,A是中文系统。A与B的D盘都共享了同样的文件夹。A服务器有账户与密码。要求实现功能:用C#做一个WinForm应用程序,能A中更新的文件备份到B去。疑问:1、怎么访问局域网共享文件夹?其中还要通过账户密码验证。
      2、怎么比较两个文件夹中更新的文件,并且进行大文件的传输备份?大虾来提供思路啊,我也想想还有什么不清楚的地方。(我是新手,想边写点东西边学习,)

解决方案 »

  1.   

    例子
    http://hi.baidu.com/freezesoul/blog/item/1ab4d42aa672eb2ed42af119.html
    http://www.xueit.com/html/2010-05/21-7643156652010511221607546.html
    程序
    http://download.csdn.net/source/1464385
      

  2.   

    第二个问题,
    可以使用FileSystemWatcher对象,文件夹内容变化了,系统会回调你的。
    参考:
    http://article.pchome.net/content-175659.html
    至于第一个,Windows系统很复杂,没有搞过类似的问题,如果是我,我就Socket传了
      

  3.   


    public static void MapDrive(IntPtr hwnd, string netRes, string shareName, string userName, string password)
            {
                NETRESOURCE NetRes = new NETRESOURCE();
                NetRes.dwScope = RESOURCE_GLOBALNET | RESOURCE_REMEMBERED;
                NetRes.dwType = RESOURCETYPE_DISK;
                NetRes.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE;
                NetRes.dwUsage = RESOURCEUSAGE_CONNECTABLE;
                NetRes.lpRemoteName = Marshal.StringToBSTR(netRes);
                NetRes.lpLocalName = Marshal.StringToBSTR(shareName);
                NetRes.lpComment = IntPtr.Zero;
                NetRes.lpProvider = IntPtr.Zero;            int ret = WinCE.WNetAddConnection3(hwnd, NetRes, password, userName, 1);            if (ret != 0)
                {
                    throw new System.ComponentModel.Win32Exception(ret, ((NetworkErrors)ret).ToString());
                }        }可以利用WNetAddConnection3这个API实作共享文件夹的登入....
      

  4.   

    这个东西我是实作在WinCE访问WindowsXP的共享文件夹....
    确定可以用...0.0
      

  5.   

    访问共享目录 Process p;
                                p = new Process();
                                p.StartInfo.FileName = "cmd.exe";
                                // 这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口 
                                p.StartInfo.UseShellExecute = false;
                                p.StartInfo.RedirectStandardInput = true;
                                p.StartInfo.RedirectStandardOutput = true;
                                p.StartInfo.CreateNoWindow = true;                            p.Start();
                                p.StandardInput.WriteLine("net use \\\\" + serverIp + " " + pssword + " /user:" + userName);// 向cmd.exe输入command                             p.StandardInput.WriteLine("exit");
                                p.WaitForExit();
                                string s = p.StandardOutput.ReadToEnd();// 得到cmd.exe的输出 
                                p.Close();或者使用磁盘映射,将共享目录映射为本机分区
      

  6.   

    建议使用Webservice/WCF 服务,通过timer心跳检测文件更新时间,通过比较时间,外加HASH验证,用新的文件更新旧的文件
      

  7.   

    不要用共享文件夹,会产生很多意想不到的操蛋问题。
    直接上WCF,开发一个服务器端,一个客户端就可以了。
      

  8.   

    Process来发送“net   use   *   \\IP\C$   password   /user:w” 
    ConnectionOptions co = new ConnectionOptions();
    co.Username = "Administrator";
    co.Password = "";
    System.Management.ManagementScope ms = new System.Management.ManagementScope("\\\\192.168.1.100\\root\\a", co);
      

  9.   

    Socket 编程能够解决你的问题。具体做法:
    1. 客户端 自动并持久运行(24 小时不间断),能够自动与服务器端连接,服务器端停止服务重新启动后能够再次与服务器连接
    2. 服务器端 自动将需要传输的文件夹打包发送(后台压缩文件)
    3. 客户端每个一阶段(比如说:每隔 24 小时)将原有文件的创建时间(主要是日期)发送给服务器端,服务器端比对接受到的时间与当前日期比较已决定是否传输覆盖原来客户端的文件
      

  10.   


    先验证文件修改时间,如果有差异再各自算成MD5值,进行比较, 如果不用则判定此文件已更新。大文件传输备份可采用分块传输,再用hash 校验完整性
      

  11.   

    应该是用 net use w: \\IP或者HOSTNAME\共享名  密码 /USER:用户名
    参照一下NET USE /?
      

  12.   

    http://topic.csdn.net/t/20051128/13/4422946.html