2014-06-12 108 views
-2

我正試圖訪問主文件夾內存在的子文件夾內的所有文件以及它們的上次訪問時間。訪問FileInfo類時出現異常

我能夠獲取所有文件,當我嘗試獲取上次訪問時間時出現問題。

我收到'對象未設置爲對象的實例'異常。

我無法在我的代碼中看到異常。

下面是代碼:

public List<String> GetDirs(string Dir) 
     { 
      List<String> files = new List<String>(); 
      try 
      { 
       foreach (string f in Directory.GetFiles(Dir)) 
       { 
        files.Add(f); 
       } 
       foreach (string d in Directory.GetDirectories(Dir)) 
       { 
        files.AddRange(GetDirs(d)); 
       } 
       int num=files.Count; 
       FileInfo[] fileinfo=null; 
       for (int i = 0; i < num; i++) 
       { 
        fileinfo[i] = new FileInfo(files[i]);//Exception at this line of code 

       } 
       foreach(FileInfo xx in fileinfo) 
       { 
        Response.Write(xx.LastWriteTime); 
       } 
       } 
      catch (System.Exception excpt) 
      { 
       Response.Write(excpt.Message); 
      } 

      return files; 
     } 

的代碼被稱爲:

string fullPath = @"D:\Main\Folder1"; 
    List<string> lst=GetDirs(fullPath); 

的代碼是在這個時間內完成。

有內部Folder1中3個文本文件,如:

d:\ MAIN \ Folder1中\ A.TXT

d:\ MAIN \ Folder1中\ BIN \ a1.txt

d:\ MAIN \ Folder1中\ SubFolder1 \ sa1.txt

我試圖獲得上述文件過於最後訪問時間,但EXCE ption不允許走得更遠。

+0

很抱歉,但你有調試器,可能是整個Visual Studio支持,並且你不知道異常的確切線? – gustavodidomenico

+0

那麼哪一行是拋出異常,你做了什麼來診斷它? –

+1

通過檢查,'fileinfo [i]'將會失敗,因爲'fileinfo'爲空......您是如何期望它工作的? –

回答

2

這是很明顯的位置:

FileInfo[] fileinfo=null; // <-- fileinfo is null 
for (int i = 0; i < num; i++) 
{ 
    fileinfo[i] = new FileInfo(files[i]);//Exception at this line of code 
// ^--- fileinfo is still null! 
} 

您嘗試使用索引上的空引用設置的值。我想你想:

FileInfo[] fileinfo= new FileInfo[num]; 
for (int i = 0; i < num; i++) 
{ 
    fileinfo[i] = new FileInfo(files[i]);//Exception at this line of code 
} 

或只是

FileInfo[] fileinfo = files.Select(f => new FileInfo(f)).ToArray(); 

編輯

閱讀您的意見後,似乎你認爲FileInfo[] fileinfo=null;將初始化空值的數組(這是在某些語言中爲true,但不是C#)。實際上,它創建的數組變量是本身的空值。若要初始化陣列,請使用語法FileInfo[] fileinfo=new FileInfo[size];,其中創建一個空值數組(更確切地說,是FileInfo的默認值,因爲它是引用類型,因此它是null)。

+0

謝謝你..加我..我是.. .. :) – Anurag

0

您尚未初始化FileInfo[] fileinfo

修復:FileInfo[] fileInfo = new FileInfo[num]

0

你的代碼似乎...有點複雜......它的功能。那豈不是一個更容易讓框架爲你做的工作,並說這樣的事情:

public static IEnumerable<FileSystemInfo> ContentsOfDirectoryTreeRootedAt(string rootDirectory) 
{ 
    DirectoryInfo root = new DirectoryInfo(rootDirectory) ; 
    if (!root.Exists) throw new DirectoryNotFoundException(rootDirectory) ; 

    foreach(FileSystemInfo entry in root.EnumerateFileSystemInfos(null,SearchOption.AllDirectories)) 
    { 
    yield return entry ; 
    } 

} 

然後,你可以沿着這些路線調用它:

foreach(FileInfo fi in ContentsOfDirectoryTreeRootedAt(@"C:\foo\bar").Where(x => x is FileInfo).Cast<FileInfo>()) 
{ 
    Console.Write("FileName: {0}" , fi.FullName) ; 
    Console.Write("\t"); 
    Console.Write("Last Updated: {1}" , fi.LastWriteTime) ; 
    Console.Write("\t"); 
    Console.Write("Size: {0:0.0}kb" , (decimal)fi.Length/1024m) ; 
    Console.WriteLine() ; 
} 
相關問題