Directory.CreateDirectory 不起作用
本文关键字:不起作用 CreateDirectory Directory | 更新日期: 2023-09-27 18:35:16
我正在使用 C# 2010 创建一个应用程序,其目的是复制具有指定扩展名的文件。它使用 .NET Framework 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));
不起作用?
编辑:我已将文件修剪功能替换为Path.GetDirectoryName(filePath)
。
让我们"调试"代码
private void GetFiles()
{
//1. Lets say SourcePath = "C:'some'kind'of'directory'"
foreach (string filePath in Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories))
{
//2. Lets say we have file filePath = "C:'some'kind'of'directory'file.txt"
//.. all validation
//3. At this point Path.GetDirectoryName("C:'some'kind'of'directory'file.txt")
// returns "C:'some'kind'of'directory'"
//4. Lets create that directory...but wait its already exist and contains some files!
// Why create what already exists?
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
to_copy.Add(filePath);
}
}
所以事实是你的 CreateDirectory 调用是无用的,因为你已经遍历了目录中的现有文件。除非您要创建所有目录中的新子目录"Temp",否则您需要这样做:
Directory.CreateDirectory(Path.Combine(Path.GetDirectoryName(filePath), "Temp"));
之后,您将创建C:'some'kind'of'directory'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));
咚!希望对您有所帮助。只要确保使用绝对路由创建它即可。