目录循环不正确创建子目录

时间:2013-09-20 21:31:33

标签: c# console directory subdirectory

图1问题1。请参阅问题2.仍然需要帮助。请参阅我对问题1解决方案

的回答

这是一个基于控制台C#的程序

问题1

我想循环创建目录创建。我正在使用以下方法复制目录(请忽略使用现在执行的操作...我只是希望设备编号正确且位于正确的位置)。现在让我们说我们每次都手动运行应用程序。我希望列表的命名和编号作为每次执行的后续操作,它应该按如下方式构建一个列表...

C:\\某些位置\\设备

在位置内......

  • 设备1包含内容的文件夹
  • 设备2包含内容的文件夹
  • 设备3包含内容的文件夹

等等......换句话说,我需要某种循环来用下一个索引替换设备的命名

这是使用中的方法......

  • 路径 - 通过用户读入。对于实例“D:\\”复制D:\\ Drive Contents
  • True - 默认用于复制子目录,而不仅仅是目标目录

    DirectoryCopy(path, @"C:\\Custom Location to duplicate to", true);
    

方法实施:

private static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs)
    {
        if (Directory.Exists(sourceDirName))
        {
            cancontinue = true;

            DirectoryInfo dir = new DirectoryInfo(sourceDirName);

            //Make an Array of Directories found on The Device
            DirectoryInfo[] dirs = dir.GetDirectories();

            if (!Directory.Exists(destDirName))
            {
                Directory.CreateDirectory(destDirName);
            }
            else
            {

                //Provide a Device Listing. Here is Where I am Stuck

                for (int i = 1; i < 11; i++)
                {
                    if (Directory.Exists(destDirName)) 
                    {
                        destDirName = destDirName + "\\Device\\ " + i.ToString();
                    }
                    else
                    {
                        break;
                    }
                }
                Directory.CreateDirectory(destDirName);
            }

以下是以相同方式复制Sub目录的循环。当前解决方案提供以下输出...

C:\ Custom Location \ Devices \ Device 1 \ Contents

在设备1中,第二个设备将复制并在其中复制,依此类推。

问题2

我想自定义它复制到的路径,到机器名称(用于发布目的)

    //This Gets the Name Perfectly + The Added Desired Path Below
    string MachineName = System.Environment.MachineName;
    string DesiredPath = "\\Desktop\\Program\\"; 

    DirectoryCopy(path, @"C:\Users\" + MachineName + DesiredPath, true);

问题这是我得到访问被拒绝错误???这是为什么?有工作吗?

2 个答案:

答案 0 :(得分:1)

问题1:

for循环不应覆盖destDirName变量:

private static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs)
{
    if (Directory.Exists(sourceDirName))
    {
        cancontinue = true;

        DirectoryInfo dir = new DirectoryInfo(sourceDirName);

        //Make an Array of Directories found on The Device
        DirectoryInfo[] dirs = dir.GetDirectories();

        if (!Directory.Exists(destDirName))
        {
            Directory.CreateDirectory(destDirName);
        }
        //Provide a Device Listing. Here is Where I am Stuck

        for (int i = 1; i < 11; i++)
        {
            string tmp =  destDirName + "\\Device\\ " + i.ToString();
            if ( ! Directory.Exists(tmp)) 
            {
                 Directory.CreateDirectory(tmp);
                 // !!!
                 // here apply your function to copy 
                 // from sourceDirName to directory in tmp variable
                 break;
            }
        }
    }
}

问题2

我打赌你没有权利在c:\ Users \中创建目录 尝试以管理员身份执行此操作

答案 1 :(得分:0)

好的,我知道我的问题是什么。固定它。 2件事错了......

  1. 这第一个if必须只包含一个(Directory.CreateDirectory(destDirName);)否则会混淆子目录命名
  2. 其次使用目录信息我创建了一个数组来检查我的目的地路径是什么(我已经将设备1设置为无限的设备)然后使用计数器添加了一个新的设备启用设备列表目录

    if(!Directory.Exists(destDirName))             {
                    Directory.CreateDirectory(destDirName);             }

            else
            {
                DirectoryInfo dircheck = new DirectoryInfo(destDirName);
                DirectoryInfo[] dirscheck = dircheck.GetDirectories();
    
                //Start at Device 1
                int count = 1;
    
                Item presents each file in the Destination directory
                foreach (var item in dirscheck)
                {
                    //If the FileName (Lets say Device 1) contained the count which is 1 then increment... Do so until you reach the last index of a device.
                    if (item.Name.Contains(count.ToString()))
                    {
                        count++;
                    }
                }
    
                //Give the Destination directory the name of the last index of the count + 1
                destDirName = holdoriginal + "Device " + count + "\\";
    
                Directory.CreateDirectory(destDirName);
    
            }