System.IO.FileInfo.MoveTo 方法

方法描述

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

语法定义(C# System.IO.FileInfo.MoveTo 方法 的用法)

public void MoveTo(
	string destFileName
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
destFileName System-String 要将文件移动到的路径,可以指定另一个文件名。
返回值 void

提示和注释

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

System.IO.FileInfo.MoveTo 方法例子

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

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;
		}
	}
}
//This code produces output similar to the following; 
//results may vary based on the computer/file structure/etc.:
//
// Welcome.
// This application demonstrates the FileInfo.MoveTo method.
// Press any key to start.
//
//     Checking whether C:\Documents and Settings\MyComputer\My Documents\FileInfoTestDirectory\MoveFrom\FromFile.xml exists.
// Creating file C:\Documents and Settings\MyComputer\My Documents\FileInfoTestDirectory\MoveFrom\FromFile.xml.
// Adding data to the file.
// Successfully created the file.
// The FileInfo instance shows these property values.
// FullName: C:\Documents and Settings\MyComputer\My Documents\FileInfoTestDirectory\MoveFrom\FromFile.xml
// CreationTime: 4/18/2006 1:24:19 PM
// LastWriteTime: 4/18/2006 1:24:19 PM
//
// File contents:
//
// 
// 
// 
// MyElement at position 0.
// 
// 
// MyElement at position 1.
// 
// 
// MyElement at position 2.
// 
// 
// MyElement at position 3.
// 
// 
// MyElement at position 4.
// 
// 
// MyElement at position 5.
// 
// 
// MyElement at position 6.
// 
// 
// MyElement at position 7.
// 
// 
// MyElement at position 8.
// 
// 
// MyElement at position 9.
// 
// 

// Preparing to move the file to
// C:\Documents and Settings\MYComputer\My Documents\FileInfoTestDirectory\DestFile.xml.
// File moved to
// C:\Documents and Settings\MYComputer\My Documents\FileInfoTestDirectory\DestFile.xml
// The FileInfo instance shows these property values.
// FullName: C:\Documents and Settings\MYComputer\My Documents\FileInfoTestDirectory\DestFile.xml
// CreationTime: 4/18/2006 1:24:19 PM
// LastWriteTime: 4/18/2006 1:24:19 PM
// 
// File contents:
// 
// 
// 
// 
// MyElement at position 0.
// 
// 
// MyElement at position 1.
// 
// 
// MyElement at position 2.
// 
// 
// MyElement at position 3.
// 
// 
// MyElement at position 4.
// 
// 
// MyElement at position 5.
// 
// 
// MyElement at position 6.
// 
// 
// MyElement at position 7.
// 
// 
// MyElement at position 8.
// 
// 
// MyElement at position 9.
// 
// 
// 
// Preparing to delete directories.
// Successfully deleted directories and files.
// Press the ENTER key to close this application.

异常

异常 异常描述
IOException 发生 I/O 错误,如目标文件已经存在或目标设备未准备好。
ArgumentNullException destFileName 为 null。
ArgumentException destFileName 为空,仅包含空白,或包含无效字符。
SecurityException 调用方没有所要求的权限。
UnauthorizedAccessException destFileName 为只读,或者是一个目录。
FileNotFoundException 找不到该文件。
DirectoryNotFoundException 指定的路径无效,比如在未映射的驱动器上。
PathTooLongException 指定的路径、文件名或者两者都超出了系统定义的最大长度。 例如,在基于 Windows 的平台上,路径必须小于 248 个字符,文件名必须小于 260 个字符。
NotSupportedException destFileName 的字符串中间包含一个冒号 (:)。

命名空间

namespace: System.IO

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。