C# 更改文件地址
假设我们有C# 更改文件地址,c#,.net,io,C#,.net,Io,假设我们有c:\\d1\\d2\\d3\\…其中在d3中有许多文件和目录 我们想将d3中的所有项目移动到c:\\d1\\new\\ 如何做到清洁和安全 c:\\d1\\new已存在 使用 此外,MSDN还有一个方便的表格,其中列出了要使用的函数,对于类似这样的问题,它是一个很好的参考。使用 此外,MSDN还有一个方便的表格,其中列出了要使用的函数,对于类似这样的问题,它是一个很好的参考。使用 将文件或目录及其内容移动到新位置 使用 将文件或目录及其内容移动到新位置 如果c:\d1\new尚不存在
c:\\d1\\d2\\d3\\…
其中在d3
中有许多文件和目录我们想将
d3
中的所有项目移动到c:\\d1\\new\\
如何做到清洁和安全
c:\\d1\\new
已存在 使用
此外,MSDN还有一个方便的表格,其中列出了要使用的函数,对于类似这样的问题,它是一个很好的参考。使用
此外,MSDN还有一个方便的表格,其中列出了要使用的函数,对于类似这样的问题,它是一个很好的参考。使用
将文件或目录及其内容移动到新位置
使用
将文件或目录及其内容移动到新位置
如果
c:\d1\new
尚不存在,并且您不想在之后保留空的c:\d1\d2\d3
文件夹,则可以使用以下方法:
如果确实存在
c:\d1\new
,则必须迭代c:\d1\d2\d3
的内容,并逐个移动其文件和文件夹:
foreach (string item in Directory.GetFileSystemEntries(@"c:\d1\d2\d3")) {
string absoluteSource = Path.Combine(@"c:\d1\d2\d3", item);
string absoluteTarget = Path.Combine(@"c:\d1\new", item);
if (File.GetAttributes(absoluteSource) & FileAttributes.Directory != 0) {
Directory.Move(absoluteSource, absoluteTarget);
} else {
File.Move(absoluteSource, absoluteTarget);
}
}
如果
c:\d1\new
尚不存在,并且您不想在之后保留空的c:\d1\d2\d3
文件夹,则可以使用以下方法:
如果确实存在
c:\d1\new
,则必须迭代c:\d1\d2\d3
的内容,并逐个移动其文件和文件夹:
foreach (string item in Directory.GetFileSystemEntries(@"c:\d1\d2\d3")) {
string absoluteSource = Path.Combine(@"c:\d1\d2\d3", item);
string absoluteTarget = Path.Combine(@"c:\d1\new", item);
if (File.GetAttributes(absoluteSource) & FileAttributes.Directory != 0) {
Directory.Move(absoluteSource, absoluteTarget);
} else {
File.Move(absoluteSource, absoluteTarget);
}
}
Move方法可以引发以下任何异常,根据您的使用情况,这些异常可能会引发,也可能不会引发。因此,您需要以适合您的应用程序的方式编写异常处理程序
- System.IO.IOExeption
- System.UnauthorizedAccessException异常
- System.ArgumentException
- System.ArgumentNullException
- System.IO.PathToLongException
- System.IO.DirectoryNotFoundException
- System.IO.IOExeption
- System.UnauthorizedAccessException异常
- System.ArgumentException
- System.ArgumentNullException
- System.IO.PathToLongException
- System.IO.DirectoryNotFoundException
最后,值得一提的是,调用Move将阻止当前线程,直到移动完成。因此,如果您是从UI执行此操作,它将阻止UI,直到复制完成。这可能需要一些时间,具体取决于移动了多少文件/目录。因此,在单独的线程中运行此操作和/或显示循环进度条可能比较谨慎。您的意思是想知道如何物理移动文件,还是想知道如何更改对旧路径的所有引用?您的意思是想知道如何物理移动文件,或者您想知道如何更改对旧路径的所有引用?+1是猴子可能能够遵循的唯一指令。如果
c:\d1\new
存在,您必须迭代c:\d1\d2\d3
的内容,并使用相同的函数逐个移动其文件和文件夹。@hamidi:我一直在寻找更好的解决方案来解决这个问题。@HPT:嗯,与最初的问题一样,假定了一些上下文,现在您让回答者必须再次这样做-给出一些上下文,一个可能会说覆盖,另一个可能会说重命名存在,我对马托说,你对梅托说+1这是猴子可能会遵循的唯一指令。如果存在c:\d1\new
,则必须迭代c:\d1\d2\d3
的内容,并使用相同的函数逐个移动其文件和文件夹。@hamidi:我正在为这个问题寻找更好的解决方案。@HPT:嗯,与最初的问题一样,一些上下文是假定的,现在你让回答者必须再做一次-给出一些上下文,一个可能会说覆盖,另一个可能会说重命名存在,我对马托说,你对梅托说!
try
{
System.IO.Directory.Move(@"c:\d1\d2\d3\", @"c:\d1\new\");
}
catch(...)
{
}
try
{
System.IO.Directory.Move(@"c:\d1\d2\d3\", @"c:\d1\new\");
}
catch (System.UnauthorizedAccessException)
{
MessageBox.Show("You do not have access to move this files/directories");
}
catch(System.IO.DirectoryNotFoundException)
{
MessageBox.Show("The directory to move files/directories from was not found")
}
catch
{
MessageBox.Show("Something blew up!");
}