将文件从远程工作站复制到c#控制台应用程序中的网络位置

时间:2013-12-19 19:56:21

标签: c# windows networking windows-console hidden-files

在我的控制台应用程序(c#)项目中,我试图让用户在没有外部连接的安全网络上键入一个或多个网络位置的列表。用户将拥有完整的管理员权限。用户提供:来源:“机器名称”和目的地:“网络位置”。

它应该针对XP和Win7机器运行并获取“文档”,“桌面”,“收藏夹”和“应用程序数据”。

它可以在XP上用于“文档”,“桌面”和“收藏夹”,但不适用于隐藏应用程序数据”,而在Win7上它适用于所有内容除“文件”外。

我研究过的每个帖子和链接都说这是一个巨大的安全隐患,无法完成。

是否有可以处理此问题的库?如果没有,有人可以确认“它无法完成。”

我已经尝试过Directory,DirectoryInfo,FileAttributes和WMI。

这是我的简化代码:

    if (Str_Drive.Length == 0)
    {
        str_SrcAndDrive = @"\\" + str_Source.ToString() + @"\c$";
    }
    else
    {
        str_SrcAndDrive = @"\\" + str_Source.ToString() + @"\" + Str_Drive + "$";
    }

    //XP:
    string str_basePath = Path.Combine(str_SrcAndDrive, "Documents and Settings");
    var dir_base = new DirectoryInfo(str_basePath);
    //System.OperatingSystem osInfo = System.Environment.OSVersion;
    if (dir_base.Exists) //&& (osInfo.Platform == System.PlatformID.Win32NT)) //XP
    {
        foreach (var dir in dir_base.GetFileSystemInfos())
        {
            switch (dir.ToString())
            {
                 case "administrator":
                 case "Administrator":
                 case "Default User":
                 case "All Users":
                 //Do nothing
                      break;
                 default:
                      string str_dir = dir.ToString();

                      //Code to show hidden directories
                      DirectoryInfo di = new DirectoryInfo(Path.Combine(str_basePath, str_dir));
                      string dirPath = "";
                      DirectoryInfo[] diArr = di.GetDirectories();
                      foreach (DirectoryInfo dri in diArr)
                      {
                           dirPath = dri.ToString();
                           FileAttributes attributes = File.GetAttributes(dirPath); //blows up here
                           if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
                           {
                               File.SetAttributes(dirPath, File.GetAttributes(dirPath) & ~FileAttributes.Hidden);
                               File.SetAttributes(dirPath, attributes);
                           }
                      }
                      //Handle XP App Data
                      string str_baseAndDirsPath = Path.Combine(dir_base.ToString(), str_dir, "Application Data");
                      DirectoryInfo dir_baseAndDirs = new DirectoryInfo(str_baseAndDirsPath);
                      if (dir_baseAndDirs.Exists)
                      {
                          string str_Destination = Path.Combine(str_Dest, str_Source, str_dir, "Application Data");
                          ProcessXcopy(str_baseAndDirsPath, str_Destination);
                      }  //continues, but this gives you the idea...

0 个答案:

没有答案