我想檢查目錄中的每個專案是否屬于檔案型別或使用 C# 的檔案夾。我想寫類似下面的代碼。但是IsInstanceOfType(FileInfo)andIsInstanceOfType(DirectoryInfo)在 C# 中是不允許的。
DirectoryInfo dirPrograms = new DirectoryInfo(folderPath);
foreach(var dir in dirPrograms.EnumerateFileSystemInfos())
{
if (dir.GetType().IsInstanceOfType(FileInfo))
//do something
elseif (dir.GetType().IsInstanceOfType(DirectoryInfo))
//do something
}
uj5u.com熱心網友回復:
您可以使用is運算子來檢查物件是否可以轉換為特定型別:
if (dir is FileInfo)
// do something
else (dir is DirectoryInfo)
// Do something
uj5u.com熱心網友回復:
盡管您可以使用運算子解決此問題is,但我寧愿避免使用反射并通過檢查Attributes屬性來檢查它,如下所示:
foreach (var dir in dirPrograms.EnumerateFileSystemInfos())
{
if (dir.Attributes.HasFlag(FileAttributes.Directory))
{
// It's a dir
}
else
{
// It's a file
}
}
uj5u.com熱心網友回復:
您沒有讀取所有檔案夾的權限。因此,您需要遞回遍歷檔案夾并在遇到例外時繼續,如下面的代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;
namespace SAveDirectoriesXml
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
const string FOLDER = @"c:\temp";
static XmlWriter writer = null;
static void Main(string[] args)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
writer = XmlWriter.Create(FILENAME, settings);
writer.WriteStartDocument(true);
DirectoryInfo info = new DirectoryInfo(FOLDER);
WriteTree(info);
writer.WriteEndDocument();
writer.Flush();
writer.Close();
Console.WriteLine("Enter Return");
Console.ReadLine();
}
static long WriteTree(DirectoryInfo info)
{
long size = 0;
writer.WriteStartElement("Folder");
try
{
writer.WriteAttributeString("name", info.Name);
writer.WriteAttributeString("numberSubFolders", info.GetDirectories().Count().ToString());
writer.WriteAttributeString("numberFiles", info.GetFiles().Count().ToString());
writer.WriteAttributeString("date", info.LastWriteTime.ToString());
foreach (DirectoryInfo childInfo in info.GetDirectories())
{
size = WriteTree(childInfo);
}
}
catch (Exception ex)
{
string errorMsg = string.Format("Exception Folder : {0}, Error : {1}", info.FullName, ex.Message);
Console.WriteLine(errorMsg);
writer.WriteElementString("Error", errorMsg);
}
FileInfo[] fileInfo = null;
try
{
fileInfo = info.GetFiles();
}
catch (Exception ex)
{
string errorMsg = string.Format("Exception FileInfo : {0}, Error : {1}", info.FullName, ex.Message);
Console.WriteLine(errorMsg);
writer.WriteElementString("Error",errorMsg);
}
if (fileInfo != null)
{
foreach (FileInfo finfo in fileInfo)
{
try
{
writer.WriteStartElement("File");
writer.WriteAttributeString("name", finfo.Name);
writer.WriteAttributeString("size", finfo.Length.ToString());
writer.WriteAttributeString("date", info.LastWriteTime.ToString());
writer.WriteEndElement();
size = finfo.Length;
}
catch (Exception ex)
{
string errorMsg = string.Format("Exception File : {0}, Error : {1}", finfo.FullName, ex.Message);
Console.WriteLine(errorMsg);
writer.WriteElementString("Error", errorMsg);
}
}
}
writer.WriteElementString("size", size.ToString());
writer.WriteEndElement();
return size;
}
}
}
uj5u.com熱心網友回復:
您還可以使用FileSystemInfo.FullPathand 然后使用DirectoryandFile類來檢查檔案或檔案夾是否存在。
所以在你的foreach回圈中它會是這樣的。
if (Directory.Exists(dir.FullPath))
// do something it its a folder
elseif (File.Exists(dir.FullPath))
// do something if its a file, shouldn't have to check this condition really but it wouldn't hurt to be safe
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/509948.html
標籤:C#。网目录目录信息
