Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改文件地址_C#_.net_Io - Fatal编程技术网

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
作为一般示例(您可能不希望/不需要显示错误消息框):

最后,值得一提的是,调用Move将阻止当前线程,直到移动完成。因此,如果您是从UI执行此操作,它将阻止UI,直到复制完成。这可能需要一些时间,具体取决于移动了多少文件/目录。因此,在一个单独的线程中运行它和/或显示一个循环进度条可能是明智的

Move方法可以引发以下任何异常,根据您的使用情况,这些异常可能会引发,也可能不会引发。因此,您需要以适合您的应用程序的方式编写异常处理程序

  • 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!");
}