0

For example, something like this fails:

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

Program crashes with "The given path's format is not supported."

EDIT: I'm doing this in a Windows Forms project vs. Console project, does that make a difference? Intuitively I wouldn't think it should, but you never know...

4

4 に答える 4

2

問題は、逐語的な文字列形式 ( @"..." ) とスラッシュのエスケープ ( "\" ) が混在していることです。

2 番目のコード

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

有効なパスとして認識されない「C:\\oldfile.txt」のパスを作成します。

あなたが与えた最初のバージョンを使用してください

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

また

string oldFile = "C:\\oldfile.txt"
于 2012-07-12T08:16:50.220 に答える
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(古いファイル、新しいファイル);

ディレクトリが存在しない場合は、Directory.CreateDirectory で作成します

于 2012-07-12T08:13:23.707 に答える
0

このMSDNの記事を参照してください
MSDNはこのように使用するように言います

 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)) {}
            }
于 2012-07-12T08:20:48.523 に答える
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);

クラッシュすることなく動作します。

于 2012-07-12T08:16:56.257 に答える