System.IO.File.Move不支持以前定义的字符串吗?

时间:2012-07-12 08:08:13

标签: c# c#-3.0 .net file-manipulation

例如,这样的事情失败了:

string oldfile = (@"C:\oldfile.txt");
string newfile = (@"C:\newfolder\newfile.txt");
System.IO.File.Move(oldfile, newfile);

程序因而崩溃“不支持给定路径的格式。”

编辑:我在Windows Forms项目与Console项目中这样做,这有什么不同?直觉上我不认为它应该,但你永远不会知道......

4 个答案:

答案 0 :(得分:2)

问题是逐字字符串格式(@“...”)和转义斜杠(“\”)

的混合

第二段代码

string oldFile = @"C:\\oldfile.txt"

创建一个'C:\\ oldfile.txt'的路径,该路径无法识别为有效路径。

使用您提供的第一个版本

string oldFile = @"C:\oldfile.txt"

string oldFile = "C:\\oldfile.txt"

答案 1 :(得分:0)

string oldfile = (@"C:\oldfile.txt");
string newfile = (@"C:\newfolder\newfile.txt");
System.IO.File.Move(oldfile , newfile );

或     string oldfile =(“C:\ oldfile.txt”);     string newfile =(@“C:\ newfolder \ newfile.txt”);     System.IO.File.Move(oldfile,newfile);

如果目标不存在,请使用Directory.CreateDirectory

创建它

答案 2 :(得分:0)

在以@为前缀的字符串文字中,以\开头的转义序列被禁用。这对于文件路径很方便,因为\是路径分隔符,您不希望它启动转义序列。

您只需使用以下内容:

string oldfile = ("C:\\oldfile.txt");
string newfile = ("C:\\newfolder\\newfile.txt");
System.IO.File.Move(oldfile, newfile);

string oldfile = (@"C:\oldfile.txt");
string newfile = (@"C:\newfolder\newfile.txt");
System.IO.File.Move(oldfile, newfile);

它没有崩溃。

答案 3 :(得分:0)

参考此MSDN文章
MSDN says to use like this

 string path = @"C:\oldfile.txt";
 string path2 = @"C:\newfolder\newfile.txt";


if (!File.Exists(path)) 
            {
                // This statement ensures that the file is created,
                // but the handle is not kept.
                using (FileStream fs = File.Create(path)) {}
            }