FileInfo.MoveTo 方法

将指定文件移到新位置,并提供指定新文件名的选项。

**命名空间:**System.IO
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
Public Sub MoveTo ( _
    destFileName As String _
)
用法
Dim instance As FileInfo
Dim destFileName As String

instance.MoveTo(destFileName)
public void MoveTo (
    string destFileName
)
public:
void MoveTo (
    String^ destFileName
)
public void MoveTo (
    String destFileName
)
public function MoveTo (
    destFileName : String
)

参数

  • destFileName
    要将文件移动到的路径,可以指定另一个文件名。

异常

异常类型 条件

IOException

发生 I/O 错误,如目标文件已经存在或目标设备未准备好。

ArgumentNullException

destFileName 为 空引用(在 Visual Basic 中为 Nothing)。

ArgumentException

destFileName 为空,仅包含空白,或包含无效字符。

SecurityException

调用方没有所要求的权限。

UnauthorizedAccessException

destFileName 为只读,或者是一个目录。

FileNotFoundException

找不到该文件。

DirectoryNotFoundException

指定的路径无效,比如在未映射的驱动器上。

PathTooLongException

指定的路径、文件名或者两者都超出了系统定义的最大长度。例如,在基于 Windows 的平台上,路径必须小于 248 个字符,文件名必须小于 260 个字符。

NotSupportedException

destFileName 的字符串中间包含一个冒号 (:)。

备注

此方法可以跨磁盘卷工作。例如,可以将 c:\MyFile.txt 文件移动到 d:\public,并重命名为 NewFile.txt。

下表列出了其他典型或相关的 I/O 任务的示例。

若要执行此操作...

请参见本主题中的示例...

写入文本文件。

如何:向文件写入文本

读取文本文件。

如何:从文件读取文本

向文件中追加文本。

如何:打开并追加到日志文件

File.AppendText

FileInfo.AppendText

重命名或移动目录。

Directory.Move

DirectoryInfo.MoveTo

Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows CE 平台说明: 某些设备文件系统不支持相对路径。指定绝对路径信息。

示例

下面的示例演示了如何将一个文件移动至另一位置并重命名该文件。

Imports System
Imports System.IO
Imports System.Text
Imports System.Text.RegularExpressions
Imports System.Xml

Module Program

    Private sourcePath As String = Environment.GetFolderPath _
    (Environment.SpecialFolder.MyDocuments) & _
    "\FileInfoTestDirectory\MoveFrom\FromFile.xml"
    '
    Private destPath As String = Environment.GetFolderPath _
    (Environment.SpecialFolder.MyDocuments) & _
    "\FileInfoTestDirectory\DestFile.xml"
    '
    ' The main entry point for the application.
    '
    <STAThread()> Sub Main()
        ' Change Console properties to make it obvious that 
        ' the application is starting.
        Console.Clear()
        ' Move it to the upper left corner of the screen.
        Console.SetWindowPosition(0, 0)
        ' Make it very large.
        Console.SetWindowSize(Console.LargestWindowWidth - 24, _
            Console.LargestWindowHeight - 16)
        Console.WriteLine("Welcome.")
        Console.WriteLine("This application demonstrates the FileInfo.MoveTo method.")
        Console.WriteLine("Press any key to start.")
        Dim s As String = Console.ReadLine()
        Console.Write("    Checking whether ")
        Console.Write(sourcePath)
        Console.WriteLine(" exists.")
        Dim fInfo As FileInfo = New FileInfo(sourcePath)
        EnsureSourceFileExists()
        DisplayFileProperties(fInfo)
        Console.WriteLine("Preparing to move the file to ")
        Console.Write(destPath)
        Console.WriteLine(".")
        MoveFile(fInfo)
        DisplayFileProperties(fInfo)
        Console.WriteLine("Preparing to delete directories.")
        DeleteFiles()
        Console.WriteLine("Press the ENTER key to close this application.")
        s = Console.ReadLine()
    End Sub
    '
    ' Moves the supplied FileInfo instance to destPath.
    '
    Private Sub MoveFile(ByVal fInfo As FileInfo)
        Try
            fInfo.MoveTo(destPath)
            Console.WriteLine("File moved to ")
            Console.WriteLine(destPath)
        Catch ex As Exception
            DisplayException(ex)
        End Try
    End Sub
    '
    ' Ensures that the test directories 
    ' and the file FromFile.xml all exist.
    '
    Private Sub EnsureSourceFileExists()
        ' Create a FileInfo instance, and get the full path 
        ' to the parent directory.
        Dim fInfo As FileInfo = New FileInfo(sourcePath)
        Dim dirPath As String = fInfo.Directory.FullName
        ' If the directory does not exist, create it.
        If Not Directory.Exists(dirPath) Then
            Directory.CreateDirectory(dirPath)
        End If
        ' If DestFile.xml exists, delete it.
        If File.Exists(destPath) Then
            File.Delete(destPath)
        End If
        Console.Write("Creating file ")
        Console.Write(fInfo.FullName)
        Console.WriteLine(".")
        Try
            If Not fInfo.Exists Then
                ' Call WriteFileContent to create the file.
                Console.WriteLine("Adding data to the file.")
                WriteFileContent(10)
                Console.WriteLine("Successfully created the file.")
            End If
        Catch ex As Exception
            DisplayException(ex)
        Finally
            dirPath = Nothing
            fInfo = Nothing
        End Try
    End Sub
    '
    ' Creates and saves an Xml file to sourcePath.
    '
    Private Sub WriteFileContent(ByVal totalElements As Integer)
        Dim doc As New XmlDocument()
        doc.PreserveWhitespace = True
        doc.AppendChild(doc.CreateXmlDeclaration("1.0", Nothing, "yes"))
        doc.AppendChild(doc.CreateWhitespace(ControlChars.CrLf))
        Dim root As XmlElement = doc.CreateElement("FileInfo.MoveTo")
        Dim index As Integer = 0
        Dim elem As XmlElement
        While index < totalElements
            elem = doc.CreateElement("MyElement")
            elem.SetAttribute("Index", index.ToString())
            elem.AppendChild(doc.CreateWhitespace(ControlChars.CrLf))
            elem.AppendChild(doc.CreateTextNode(String.Format _
             ("MyElement at position {0}.", index)))
            elem.AppendChild(doc.CreateWhitespace(ControlChars.CrLf))
            root.AppendChild(elem)
            index += 1
        End While
        doc.AppendChild(root)
        doc.AppendChild(doc.CreateWhitespace(ControlChars.CrLf))
        doc.Save(sourcePath)
    End Sub
    '
    ' Displays FullName, CreationTime, and LastWriteTime of the supplied
    ' FileInfo instance, then displays the text of the file.
    '
    Private Sub DisplayFileProperties(ByVal fInfo As FileInfo)
        Console.WriteLine("The FileInfo instance shows these property values.")
        Dim reader As StreamReader = Nothing
        Try
            Console.Write("FullName: ")
            Console.WriteLine(fInfo.FullName)
            Console.Write("CreationTime: ")
            Console.WriteLine(fInfo.CreationTime)
            Console.Write("LastWriteTime: ")
            Console.WriteLine(fInfo.LastWriteTime)
            Console.WriteLine()
            Console.WriteLine("File contents:")
            Console.WriteLine()
            reader = New StreamReader(fInfo.FullName)
            While Not reader.EndOfStream
                Console.WriteLine(reader.ReadLine())
            End While
            Console.WriteLine()
        Catch ex As Exception
            DisplayException(ex)
        Finally
            If Not reader Is Nothing Then
                reader.Close()
                reader = Nothing
            End If
        End Try
    End Sub
    '
    ' Deletes the test directory and all its files and subdirectories.
    '
    Private Sub DeleteFiles()
        Try
            Dim dInfo As DirectoryInfo = New DirectoryInfo(Environment.GetFolderPath _
              (Environment.SpecialFolder.MyDocuments) + "\FileInfoTestDirectory")
            If dInfo.Exists Then
                dInfo.Delete(True)
                Console.WriteLine("Successfully deleted directories and files.")
            End If
            dInfo = Nothing
        Catch ex As Exception
            DisplayException(ex)
        End Try
    End Sub
    '
    ' Displays information about the supplied Exception. This
    ' code is not suitable for production applications.
    '
    Private Sub DisplayException(ByVal ex As Exception)
        Dim sb As New StringBuilder("An exception of type """)
        sb.Append(ex.GetType().FullName)
        sb.Append(""" has occurred.")
        sb.Append(ControlChars.CrLf)
        sb.Append(ex.Message)
        sb.Append(ControlChars.CrLf)
        sb.Append("Stack trace information:")
        sb.Append(ControlChars.CrLf)
        Dim matchCol As MatchCollection = Regex.Matches(ex.StackTrace, _
        "(at\s)(.+)(\.)([^\.]*)(\()([^\)]*)(\))((\sin\s)(.+)(:line )([\d]*))?")
        Dim L As Integer = matchCol.Count
        Dim y, K As Integer
        Dim argList() As String
        Dim matchObj As Match
        Dim x As Integer = 0
        While x < L
            matchObj = matchCol(x)
            sb.Append(ControlChars.CrLf)
            sb.Append(ControlChars.CrLf)
            sb.Append(matchObj.Result("$1 $2$3$4$5"))
            argList = matchObj.Groups(6).Value.Split(New Char() {","})
            K = argList.Length
            y = 0
            While y < K
                sb.Append(ControlChars.CrLf)
                sb.Append("    ")
                sb.Append(argList(y).Trim().Replace(" ", "        "))
                sb.Append(",")
                y += 1
            End While
            sb.Remove(sb.Length - 1, 1)
            sb.Append(ControlChars.CrLf)
            If 0 < matchObj.Groups(8).Length Then
                sb.Append(ControlChars.CrLf)
                sb.Append(matchObj.Result("$10"))
                sb.Append(ControlChars.CrLf)
                sb.Append(matchObj.Result("line $12"))
            End If
            x += 1
        End While
        argList = Nothing
        matchObj = Nothing
        matchCol = Nothing
        Console.WriteLine(sb.ToString())
        sb = Nothing
        Return
    End Sub
End Module

using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.IO;
using System.Reflection;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;




namespace Microsoft.Samples.MoveTo.CS 
{

    class Program 
    {
        private static string sourcePath = Environment.GetFolderPath
            (Environment.SpecialFolder.MyDocuments) + 
            @"\FileInfoTestDirectory\MoveFrom\FromFile.xml";
        
        private static string destPath = Environment.GetFolderPath
            (Environment.SpecialFolder.MyDocuments) + 
            @"\FileInfoTestDirectory\DestFile.xml";
        //
        // The main entry point for the application.
        //
        [STAThread()] static void Main () 
        {
            // Change Console properties to make it obvious that 
            // the application is starting.
            Console.Clear();
            // Move it to the upper left corner of the screen.
            Console.SetWindowPosition(0, 0);
            // Make it very large.
            Console.SetWindowSize(Console.LargestWindowWidth - 24,
                Console.LargestWindowHeight - 16);
            Console.WriteLine("Welcome.");
            Console.WriteLine("This application demonstrates the FileInfo.MoveTo method.");
            Console.WriteLine("Press any key to start.");
            string s = Console.ReadLine();
            Console.Write("    Checking whether ");
            Console.Write(sourcePath);
            Console.WriteLine(" exists.");
            FileInfo fInfo = new FileInfo (sourcePath);
            EnsureSourceFileExists();
            DisplayFileProperties(fInfo);
            Console.WriteLine("Preparing to move the file to ");
            Console.Write(destPath);
            Console.WriteLine(".");
            MoveFile(fInfo);
            DisplayFileProperties(fInfo);
            Console.WriteLine("Preparing to delete directories.");
            DeleteFiles();
            Console.WriteLine("Press the ENTER key to close this application.");
            s = Console.ReadLine();
        }
        //
        // Moves the supplied FileInfo instance to destPath.
        //
        private static void MoveFile(FileInfo fInfo) 
        {
            try 
            {
                fInfo.MoveTo(destPath);
                Console.WriteLine("File moved to ");
                Console.WriteLine(destPath);
            } catch (Exception ex) {
                DisplayException(ex);
            }
        }
        //
        // Ensures that the test directories 
        // and the file FromFile.xml all exist.
        // 
        private static void EnsureSourceFileExists() 
        {
            FileInfo fInfo = new FileInfo(sourcePath);
            string dirPath = fInfo.Directory.FullName;
            if (!Directory.Exists(dirPath)) 
            {
                Directory.CreateDirectory(dirPath);
            }
            if (File.Exists(destPath)) 
            {
                File.Delete(destPath);
            }
            Console.Write("Creating file ");
            Console.Write(fInfo.FullName);
            Console.WriteLine(".");
            try 
            {
                if (!fInfo.Exists) 
                {
                    Console.WriteLine("Adding data to the file.");
                    WriteFileContent(10);
                    Console.WriteLine("Successfully created the file.");
                }
            } 
            catch (Exception ex) 
            {
                DisplayException(ex);
            } 
            finally 
            {
                dirPath = null;
            }
        }
        //
        // Creates and saves an Xml file to sourcePath.
        //
        private static void WriteFileContent(int totalElements) 
        {
            XmlDocument doc = new XmlDocument();
            doc.PreserveWhitespace = true;
            doc.AppendChild(doc.CreateXmlDeclaration("1.0", null, "yes"));
            doc.AppendChild(doc.CreateWhitespace("\r\n"));
            XmlElement root = doc.CreateElement("FileInfo.MoveTo");
            root.AppendChild(doc.CreateWhitespace("\r\n"));
            int index = 0;
            XmlElement elem;
            while (index < totalElements) 
            {
                
                elem = doc.CreateElement("MyElement");
                elem.SetAttribute("Index", index.ToString());
                elem.AppendChild(doc.CreateWhitespace("\r\n"));
                elem.AppendChild(doc.CreateTextNode(String.Format
                    ("MyElement at position {0}.", index)));
                elem.AppendChild(doc.CreateWhitespace("\r\n"));
                root.AppendChild(elem);
                root.AppendChild(doc.CreateWhitespace("\r\n"));
                index++;
            }
            doc.AppendChild(root);
            doc.AppendChild(doc.CreateWhitespace("\r\n"));
            doc.Save(sourcePath);
            elem = null;
            root = null;
            doc = null;
        }
        //
        // Displays FullName, CreationTime, and LastWriteTime of the supplied
        // FileInfo instance, then displays the text of the file.
        //
        private static void DisplayFileProperties(FileInfo fInfo) 
        {
            Console.WriteLine("The FileInfo instance shows these property values.");
            StreamReader reader = null;
            try 
            {
                Console.Write("FullName: ");
                Console.WriteLine(fInfo.FullName);
                Console.Write("CreationTime: ");
                Console.WriteLine(fInfo.CreationTime);
                Console.Write("LastWriteTime: ");
                Console.WriteLine(fInfo.LastWriteTime);
                Console.WriteLine();
                Console.WriteLine("File contents:");
                Console.WriteLine();
                reader = new StreamReader(fInfo.FullName);
                while (!reader.EndOfStream) 
                {
                    Console.WriteLine(reader.ReadLine());
                }
                Console.WriteLine();
            } 
            catch (Exception ex) 
            {
                DisplayException(ex);
            } 
            finally 
            {
                if (reader != null) 
                {
                    reader.Close();
                }
                reader = null;
            }
        }
        //
        // Deletes the test directory and all its files and subdirectories.
        //
        private static void DeleteFiles() 
        {
            try 
            {
                DirectoryInfo dInfo = new DirectoryInfo(Environment.GetFolderPath
                    (Environment.SpecialFolder.MyDocuments) + "\\FileInfoTestDirectory");
                if (dInfo.Exists) 
                {
                    dInfo.Delete(true);
                    Console.WriteLine("Successfully deleted directories and files.");
                }
                dInfo = null;
            } 
            catch (Exception ex) 
            {
                DisplayException(ex);
            }
        }
        //
        // Displays information about the supplied Exception. This
        // code is not suitable for production applications.
        //
        private static void DisplayException(Exception ex) 
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("An exception of type \"");
            sb.Append(ex.GetType().FullName);
            sb.Append("\" has occurred.\r\n");
            sb.Append(ex.Message);
            sb.Append("\r\nStack trace information:\r\n");
            MatchCollection matchCol = Regex.Matches(ex.StackTrace,
@"(at\s)(.+)(\.)([^\.]*)(\()([^\)]*)(\))((\sin\s)(.+)(:line )([\d]*))?");
            int L = matchCol.Count;
            string[] argList;
            Match matchObj;
            int y, K;
            for(int x = 0; x < L; x++) 
            {
                matchObj = matchCol[x];
                sb.Append(matchObj.Result("\r\n\r\n$1 $2$3$4$5"));
                argList = matchObj.Groups[6].Value.Split(new char[] { ',' });
                K = argList.Length;
                for (y = 0; y < K; y++) 
                {
                    sb.Append("\r\n    ");
                    sb.Append(argList[y].Trim().Replace(" ", "        "));
                    sb.Append(',');
                }
                sb.Remove(sb.Length - 1, 1);
                sb.Append("\r\n)");
                if (0 < matchObj.Groups[8].Length) 
                {
                    sb.Append(matchObj.Result("\r\n$10\r\nline $12"));
                }
            }
            argList = null;
            matchObj = null;
            matchCol = null;
            Console.WriteLine(sb.ToString());
            sb = null;
        }
    }
}

.NET Framework 安全性

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

FileInfo 类
FileInfo 成员
System.IO 命名空间

其他资源

文件和流 I/O
如何:从文件读取文本
如何:向文件写入文本