[英]Validate/read total count of file in folder, size of every single file and some text of file with any extension on local folder
我没有。 在本地文件夹中具有许多扩展名的文件。 我必须从文件夹中读取文件总数的计数,再次验证大小后,我必须检查每个文件的大小。..如果文件大小小于0字节。 我必须将其报告为已损坏或无法打开该文件...因此我们可以通过打开文件夹中的每个文件来检查该文件...
我试过下面的代码来计数,但只有一种扩展类型。 因此,如何从具有所有扩展名的文件夹中获取文件计数,以及如何检查文件大小。 以及我如何检查它是否已损坏。 如果我可以打开它,那就足够了。
public static int GetFileCount(string path, string searchPattern, SearchOption searchOption)
{
var fileCount = 0;
var fileIter = Directory.EnumerateFiles(path, searchPattern, searchOption);
foreach (var file in fileIter)
fileCount++;
return fileCount;
}
上面的函数称为
GetFileCount(@"D:\Attachment", "*.png", SearchOption.AllDirectories);
因此,首先计算给定文件夹中的文件,然后循环遍历每个文件。
DirectoryInfo di = new DirectoryInfo("");
foreach (FileInfo fi in di.GetFiles())
{
if(fi.Length ==0)
{
//must be corrupt
}
}
您可以执行类似以下操作。 我意识到,拥有一个用于文件名,扩展名和长度的容器类有点多余,因为FileInfo对象已经包含了此信息,但是拥有一个容器就可以选择具有其他自定义字段和属性。
应编译以下内容:
class Program
{
static void Main(string[] args)
{
var details = GetFileDetails(@"c:\", "*.*", SearchOption.AllDirectories);
//var details = GetFileDetails(@"c:\", "*.png", SearchOption.AllDirectories);
var filesOfZeroSize = details.Where(detail => detail.Length <= 0).ToList();
var filesOfZeroSizeCount = filesOfZeroSize.Count;
if (filesOfZeroSizeCount > 0)
{
Console.WriteLine("There are {0} files with a length of 0.", filesOfZeroSizeCount);
}
}
public static List<FileDetail> GetFileDetails(string path, string searchPattern, SearchOption options)
{
var directory = new DirectoryInfo(path);
if (!directory.Exists)
{
throw new DirectoryNotFoundException("Path");
}
List<FileDetail> fileDetails = new List<FileDetail>();
FileInfo[] files = directory.GetFiles(searchPattern, options);
foreach (FileInfo fileInfo in files)
{
fileDetails.Add(new FileDetail(fileInfo.Name, fileInfo.Extension, fileInfo.Length));
}
return fileDetails;
}
}
class FileDetail
{
public string FileName { get; set; }
public string Extension { get; set; }
public long Length { get; set; }
public FileDetail()
: this(null, null, -1)
{
}
public FileDetail(string fileName, string extension, long length)
{
this.FileName = fileName;
this.Extension = extension;
this.Length = length;
}
}
请记住,使用上述解决方案时,您可能会遇到拒绝访问的异常。 在这种情况下,请考虑查看以下帖子的可接受答案,并修改GetFileDetails方法以适应此情况。
尝试使用此方法,只需传递路径目录,即可在控制台中看到带有扩展名的文件名及其大小,以逗号分隔。
public static void filesInfoInDir(string dirPath)
{
try
{
foreach (string f in Directory.GetFiles(dirPath))
{
FileInfo file = new FileInfo(Path.Combine(dirPath,f));
long s1 = file.Length;
//This will write the file names along with their size separated with a comma
Console.WriteLine(f + "," + s1);
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.