C# Directory.CreateDirectory不工作

C# Directory.CreateDirectory不工作,c#,directory,.net,C#,Directory,.net,我正在使用C#2010创建一个应用程序,其目的是复制具有指定扩展名的文件。它使用.NETFramework 3.5 我有以下代码: private void GetFiles() { bool validext; foreach (string filePath in Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories)) { /

我正在使用C#2010创建一个应用程序,其目的是复制具有指定扩展名的文件。它使用.NETFramework 3.5

我有以下代码:

    private void GetFiles()
    {
        bool validext;
        foreach (string filePath in Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories))
        {
            //Check if the file has a specified extension
            validext = false;
            foreach (string extension in ext)
                if (HasExtension(filePath, extension))
                {
                    validext = true;
                    break;
                }

            if ((validext && mode == 1) || (!validext && mode == 2))
            {
                Directory.CreateDirectory(Path.GetDirectoryName(filePath));
                to_copy.Add(filePath);
            }
        }
        totalcount = to_copy.Count;
    }
此命令有问题:

Directory.CreateDirectory(TrimFile(filePath));
它不会引发任何异常,它应该创建的目录路径有效,并且应用程序以管理员权限运行。然而,该目录并没有被创建。搜索互联网没有给我任何答案,所以我的问题是:

为什么是
Directory.CreateDirectory(TrimFile(filePath))不工作

编辑:我已经用路径替换了FileTrim函数。GetDirectoryName(filePath)

允许“调试”代码

因此,事实是您的CreateDirectory调用是无用的,因为您已经在目录中的现有文件中循环。除非您想在所有目录中创建新的子目录“Temp”,否则您需要执行以下操作:

Directory.CreateDirectory(Path.Combine(Path.GetDirectoryName(filePath), "Temp"));
string directoryToCopyFiles = @"C:\My\directory\of\file\copies";
if(!Directory.Exists(directoryToCopyFiles))
   Directory.CreateDirectory(directoryToCopyFiles);

File.Copy(Path.Combine(directoryToCopyFiles, Path.GetFileName(filePath)), filePath);
之后,您将获得
C:\some\kind\of\directory\Temp
创建的目录

要将文件复制到其他目录,您需要执行以下操作:

Directory.CreateDirectory(Path.Combine(Path.GetDirectoryName(filePath), "Temp"));
string directoryToCopyFiles = @"C:\My\directory\of\file\copies";
if(!Directory.Exists(directoryToCopyFiles))
   Directory.CreateDirectory(directoryToCopyFiles);

File.Copy(Path.Combine(directoryToCopyFiles, Path.GetFileName(filePath)), filePath);
之后,如果以前不存在目录,将创建目录
C:\My\directory\of\file\copies
,并将同名文件复制到该目录。

允许“调试”代码

因此,事实是您的CreateDirectory调用是无用的,因为您已经在目录中的现有文件中循环。除非您想在所有目录中创建新的子目录“Temp”,否则您需要执行以下操作:

Directory.CreateDirectory(Path.Combine(Path.GetDirectoryName(filePath), "Temp"));
string directoryToCopyFiles = @"C:\My\directory\of\file\copies";
if(!Directory.Exists(directoryToCopyFiles))
   Directory.CreateDirectory(directoryToCopyFiles);

File.Copy(Path.Combine(directoryToCopyFiles, Path.GetFileName(filePath)), filePath);
之后,您将获得
C:\some\kind\of\directory\Temp
创建的目录

要将文件复制到其他目录,您需要执行以下操作:

Directory.CreateDirectory(Path.Combine(Path.GetDirectoryName(filePath), "Temp"));
string directoryToCopyFiles = @"C:\My\directory\of\file\copies";
if(!Directory.Exists(directoryToCopyFiles))
   Directory.CreateDirectory(directoryToCopyFiles);

File.Copy(Path.Combine(directoryToCopyFiles, Path.GetFileName(filePath)), filePath);

之后,如果目录以前不存在,将创建目录
C:\My\directory\of\file\copies
,并在那里复制同名文件。

我最近也遇到了这个问题,我很傻,我没有具体化正确的路径,所以它是在创建我具体化的目录
VSProjects/ProjectName/bin/Debug/
:'D

之前:

if (!Directory.Exists(Path.GetDirectoryName(properties.ApiConfigRoute)))
      Directory.CreateDirectory("ConfigFolder");
之后:

if (!Directory.Exists(Path.GetDirectoryName(properties.ApiConfigRoute)))
      Directory.CreateDirectory(Path.GetDirectoryName(properties.ApiConfigRoute));

啊!希望能有帮助。只要确保你是用绝对路线来创建它

我最近也陷入了这一困境,愚蠢的我,我没有具体化正确的路径,所以它是在创建我具体化的目录
VSProjects/ProjectName/bin/Debug/
:'D

之前:

if (!Directory.Exists(Path.GetDirectoryName(properties.ApiConfigRoute)))
      Directory.CreateDirectory("ConfigFolder");
之后:

if (!Directory.Exists(Path.GetDirectoryName(properties.ApiConfigRoute)))
      Directory.CreateDirectory(Path.GetDirectoryName(properties.ApiConfigRoute));

啊!希望能有帮助。只需确保您使用绝对路径创建它

您可以发布
TrimFile(filePath)
的输出吗?TrimFile的用途是什么?你能告诉我们在使用TrimFile之前和之后路径字符串的内容是什么吗?我猜这就是你的问题所在。见:1。您正在尝试创建已存在的目录。2.您可以使用
Path.GetDirectoryName(filePath)
代替
TrimFile
。如果(!Directory.Exists(Path.GetDirectoryName(filePath)))在
Directory.createdirectoryname()之前添加
请。文件的用途是什么?你能告诉我们在使用TrimFile之前和之后路径字符串的内容是什么吗?我猜这就是你的问题所在。见:1。您正在尝试创建已存在的目录。2.您可以使用
Path.GetDirectoryName(filePath)
来代替
TrimFile
。如果(!Directory.Exists(Path.GetDirectoryName(filePath)))
Directory.createdirectoryname()之前添加
,您将看到您不会输入if语句。我认为我没有正确详细说明程序的用途。错误是我试图在源文件夹中创建我想要复制的目录,而不是在目标文件夹中,正如您所指出的,这显然是毫无意义的。解决方案是将Directory.CreateDirectory替换为Directory.CreateDirectory(Path.GetDirectoryName(filePath).replace(SourcePath,DestinationPath))。然而,你的评论为我指明了正确的方向,所以这实际上是一个答案。非常感谢你的帮助!我想我没有正确地详细说明这个计划的目的。错误是我试图在源文件夹中创建我想要复制的目录,而不是在目标文件夹中,正如您所指出的,这显然是毫无意义的。解决方案是将Directory.CreateDirectory替换为Directory.CreateDirectory(Path.GetDirectoryName(filePath).replace(SourcePath,DestinationPath))。然而,你的评论为我指明了正确的方向,所以这实际上是一个答案。非常感谢你的帮助!