2017-02-10 21 views
1

以下のコードでは、test.txtは実行前に存在し、test2.txtは存在しません。 destFile.Existsを実行すると、ファイルがdestFileの場所にコピーされた後にnullが返されます。これを引き起こしているのは何ですか?私は起きていることをサポートするmsdnの情報を見つけることができません。FileInfo.Existsファイルがコピーされた後にFalseを返します

var origFile = new FileInfo(@"C:\Users\user\Desktop\CopyTest\test.txt"); 
    var destFile = new FileInfo(@"C:\Users\user\Desktop\CopyTest\test2.txt"); 

    if (!destFile.Exists && origFile.Exists) 
     origFile.CopyTo(destFile.FullName); 

    if (destFile.Exists) 
     Console.WriteLine("The file was found"); 

    Console.ReadLine(); 

答えて

5

、プロパティ

destFile.Refresh(); 
if (destFile.Exists) 
     Console.WriteLine("The file was found"); 

または静的メソッドFile.Exists使用アクセスする前destFile.Refresh();を使用しよう:FileInfoは情報の多くを提供していますが、これはスナップショットです

if (File.Exists(@"C:\Users\user\Desktop\CopyTest\test2.txt")) 
    Console.WriteLine("The file was found"); 

を最初にアクセスしたときに初期化され、後で更新されることはありません。現在の状態が必要な場合や、複数の情報が必要な場合にのみ使用してください。それ以外の場合はstatic methods in System.IO.Fileを使用してください。

HereExistsプロパティの現在の実装を見ることができます。最初にアクセスしたときに初期化され、後で古い状態が返されることがわかります:

public override bool Exists { 
[System.Security.SecuritySafeCritical] // auto-generated 
get { 
    try { 
     if (_dataInitialised == -1) 
      Refresh(); 
     if (_dataInitialised != 0) { 
      // Refresh was unable to initialise the data. 
      // We should normally be throwing an exception here, 
      // but Exists is supposed to return true or false. 
      return false; 
     } 
     return (_data.fileAttributes & Win32Native.FILE_ATTRIBUTE_DIRECTORY) == 0; 
    } 
    catch 
    { 
     return false; 
    } 
} 
関連する問題