2017-06-11 11 views
-1

treeViewで選択されたノードのfile.CreationTimeにアクセスし、treeView外のラベルに表示する必要があります。 .Tagを追加して、現在ディレクトリが選択されているときにうまく動作しますが、ファイルが選択されると、treeView1.SelectedNode.Tagがnullになり、アプリケーションがクラッシュします。TreeNode変数ファイルへのC#アクセスtreeView外のCreateTime

どのように修正するか考えている人はいますか? DirectoryInfo.GetFiles(によって返されたFileInfo配列を超えるときは、ループ

private void ListDirectory(TreeView treeView, string path) 
    { 
     treeView1.Nodes.Clear(); 
     var rootDirectoryInfo = new DirectoryInfo(path); 

     treeView1.Nodes.Add(CreateDirectoryNode(rootDirectoryInfo)); 

    } 

private static TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo) 
    {  
    var directoryNode = new TreeNode(directoryInfo.Name + " (" + DirectorySize(new DirectoryInfo(directoryInfo.FullName)) + " bytes)" + " (" + directoryInfo.GetFileSystemInfos().Length + " files)"); 
     foreach (var directory in directoryInfo.GetDirectories()) 
      directoryNode.Nodes.Add(CreateDirectoryNode(directory)); 

     foreach (var file in directoryInfo.GetFiles()) 
      directoryNode.Nodes.Add(new TreeNode(file.Name + " (" + file.Length + " bytes)"+ file.CreationTime)); 

     directoryNode.Tag = directoryInfo; 

     return directoryNode; 
    } 
    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 
    { 
     if (treeView1.SelectedNode.Tag!=null) 

     { 
     var directoryInfo = treeView1.SelectedNode.Tag as DirectoryInfo; 
     var creationTime = directoryInfo.CreationTime.ToString(); 
      label1.Text = creationTime; 
     var lastAccessTime = directoryInfo.LastAccessTime; 
      label2.Text = lastAccessTime.ToString(); 
     var lastWriteTime = directoryInfo.LastWriteTime; 
      label3.Text = lastWriteTime.ToString(); 
     } 
     else 
     { 
      label1.Text = ""; 
      label2.Text = ""; 
      label3.Text = ""; 
     } 


    } 

答えて

0

など、作成時刻を取得するためにFileSystemInfoDirectoryInfoFileInfoの両方をキャスト。

private static TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo) 
{ 
    var directoryNode = new TreeNode(directoryInfo.Name /*+ " (" + DirectorySize(new DirectoryInfo(directoryInfo.FullName)) + " bytes)" + " (" + directoryInfo.GetFileSystemInfos().Length + " files)"*/); 
    foreach (var directory in directoryInfo.GetDirectories()) 
     directoryNode.Nodes.Add(CreateDirectoryNode(directory)); 

    foreach (var file in directoryInfo.GetFiles()) 
     directoryNode.Nodes.Add(new TreeNode(file.Name + " (" + file.Length + " bytes)" + file.CreationTime)); 

    directoryNode.Tag = directoryInfo; 

    return directoryNode; 
} 

また、FileInfoだけでなく、TagにFileSystemInfoを使用することもできます。 DirectoryInfoはDirectoriesとFilesでうまく動作しますが、TreeView1_AfterSelectedのタグにFileSystemInfoの場合はディレクトリとファイルの両方に一貫して簡単にアクセスできます。

DirectoryInfoとFileInfoはFileSytemInfoから継承されています。

0

あなたがツリーノードに任意のタグを追加しないためには、作成した)

private static TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo) 
{  
    var directoryNode = new TreeNode(directoryInfo.Name + " (" + 
      DirectorySize(directoryInfo) + 
      " bytes)" + " (" + directoryInfo.GetFileSystemInfos().Length + 
      " files)"); 
    foreach (var directory in directoryInfo.GetDirectories()) 
     directoryNode.Nodes.Add(CreateDirectoryNode(directory)); 

    foreach (var file in directoryInfo.GetFiles()) 
    { 
     TreeNode node = new TreeNode(file.Name + " (" + file.Length + " bytes)"+ file.CreationTime); 
     directoryNode.Nodes.Add(node); 
     node.Tag = file; 
    } 

    directoryNode.Tag = directoryInfo; 
    return directoryNode; 
} 
0

あなたは、ツリーノードにFileInfoを追加する必要があります。そして、あなたがファイルを反復処理した後、DirectoryInfoを追加していない

private static TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo) 
{  
    //original code... 

    // Note: When creating tree node for displaying file, 
    // assign FileInfo to fileNode.Tag 
    foreach (var file in directoryInfo.GetFiles()) { 
     var fileNode = new TreeNode(file.Name + " (" + file.Length + " bytes)"+ file.CreationTime); 
     fileNode.Tag = file; 
     directoryNode.Nodes.Add(fileNode); 
    } 

    //original code... 
} 


private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 
{ 
    // Note: Both DirectoryInfo and FileInfo, inherrits FileSystemInfo 
    // thus you can cast both to FileSystemInfo. 
    var fsInfo = treeView1.SelectedNode.Tag as FileSystemInfo; 
    if (fsInfo != null) 
    {    
     var creationTime = fsInfo.CreationTime.ToString(); 
      label1.Text = creationTime; 
     var lastAccessTime = fsInfo.LastAccessTime; 
      label2.Text = lastAccessTime.ToString(); 
     var lastWriteTime = fsInfo.LastWriteTime; 
      label3.Text = lastWriteTime.ToString(); 
    } 
    else 
    { 
     label1.Text = ""; 
     label2.Text = ""; 
     label3.Text = ""; 
    } 
} 
関連する問題