我正在使用c#进行编程,并希望将包含子文件夹的文件夹从闪存盘复制到启动。
这是我的代码:
private void copyBat()
{
try
{
string source_dir = "E:\\Debug\\VipBat";
string destination_dir = "C:\\Users\\pc\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup";
if (!System.IO.Directory.Exists(destination_dir))
{
System.IO.Directory.CreateDirectory(destination_dir);
}
// Create subdirectory structure in destination
foreach (string dir in Directory.GetDirectories(source_dir, "*", System.IO.SearchOption.AllDirectories))
{
Directory.CreateDirectory(destination_dir + dir.Substring(source_dir.Length));
}
foreach (string file_name in Directory.GetFiles(source_dir, "*.*", System.IO.SearchOption.AllDirectories))
{
File.Copy(file_name, destination_dir + file_name.Substring(source_dir.Length), true);
}
}
catch (Exception e)
{
MessageBox.Show(e.Message, "HATA", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
我收到了一个错误:
找不到路径E:\ Debug \ VipBat
的一部分
答案 0 :(得分:17)
错误是不言自明的。您尝试访问的路径不存在。
string source_dir = "E:\\Debug\\VipBat\\{0}";
我确信这不是正确的道路。直接在Debug
驱动器中的E:
文件夹对我来说是错误的。我想必须有项目名称文件夹目录。
第二件事;你的字符串中的{0}
是什么。我确信它是一个参数占位符,因为文件夹名称不能包含{0}
这样的名称。因此,您需要使用String.Format()
来替换实际值。
string source_dir = String.Format("E:\\Debug\\VipBat\\{0}",variableName);
但首先检查您尝试访问的路径是否存在。
答案 1 :(得分:5)
出了点问题。你写了:
string source_dir = @"E:\\Debug\\VipBat\\{0}";
,错误是
无法找到路径E \ Debug \ VCCSBat
的一部分
这不是同一个目录。
在您的代码中存在问题,您必须使用:
string source_dir = @"E:\Debug\VipBat"; // remove {0} and the \\ if using @
或
string source_dir = "E:\\Debug\\VipBat"; // remove {0} and the @ if using \\
答案 2 :(得分:4)
驱动器E是映射驱动器吗?然后,它可以由除用户帐户之外的其他帐户创建。这可能是错误的原因。
答案 3 :(得分:2)
可能不相关,但请考虑使用Path.Combine
代替destination_dir + dir.Substring(...)
。从它的外观来看,你的.Substring()会在开头留下反弹,但像Path这样的辅助类是有原因的。
答案 4 :(得分:2)
我有同样的错误,虽然在我的情况下问题是DESTINATION路径的格式。上面的注释在调试路径字符串格式方面是正确的,但在File.Copy异常报告中似乎存在一个错误,它仍然会返回SOURCE路径而不是DESTINATION路径。所以不要忘记在这里看看。
-TC
答案 5 :(得分:2)
导致此错误的原因之一可能是其中之一:
答案 6 :(得分:1)
File.Copy(file_name, destination_dir + file_name.Substring(source_dir.Length), true);
此行有错误,因为代码所需的是directory name + file name
,而不是文件名。
这是正确的
File.Copy(source_dir + file_name, destination_dir + file_name.Substring(source_dir.Length), true);
答案 7 :(得分:1)
我只需使用管理员权限重新启动Visual Studio即可解决类似问题。
问题是因为它无法在没有提升访问权限的情况下打开与Sharepoint相关的一个项目。
答案 8 :(得分:0)
答案已经出现,另一方面,我认为您应该使用
using System.IO;
代替上面的“复杂”语法。