C# 如何使用IListFileItem在属性上使用OrderByDescending?
我有以下代码,它将返回特定azure存储路径的所有列表项、文件和文件夹 我想根据属性LastModified使用OrderByDescending对其进行筛选 如何做到这一点C# 如何使用IListFileItem在属性上使用OrderByDescending?,c#,azure,azure-storage,azure-storage-files,C#,Azure,Azure Storage,Azure Storage Files,我有以下代码,它将返回特定azure存储路径的所有列表项、文件和文件夹 我想根据属性LastModified使用OrderByDescending对其进行筛选 如何做到这一点 // Get list of all files/directories on the file share CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["sto
// Get list of all files/directories on the file share
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["storageConnectionString"]);
CloudFileClient fileClient = cloudStorageAccount.CreateCloudFileClient();
CloudFileShare fileShare = fileClient.GetShareReference(ConfigurationManager.AppSettings["shareName"]);
var sourceName = fileShare.GetRootDirectoryReference().GetDirectoryReference((ConfigurationManager.AppSettings["sourceName"]));
IEnumerable<IListFileItem> fileList = sourceName.ListFilesAndDirectories();
var test = (fileList.OrderByDescending(t => t.Uri.AbsolutePath).FirstOrDefault());
我想使用LastModified来代替Uri.AbsolutePath。试试下面的代码。您需要首先获取所有文件,因为ListFilesAndDirectory只返回单个级别中的文件和目录
List<CloudFile> list = new List<CloudFile>();
public void Test()
{
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["storageConnectionString"]);
CloudFileClient fileClient = cloudStorageAccount.CreateCloudFileClient();
CloudFileShare fileShare =
fileClient.GetShareReference(ConfigurationManager.AppSettings["shareName"]);
var sourceName = fileShare.GetRootDirectoryReference().GetDirectoryReference((ConfigurationManager.AppSettings["sourceName"]));
IEnumerable<IListFileItem> fileList = sourceName.ListFilesAndDirectories();
listFile(fileList);
var test = (from file in list
orderby file.Properties.LastModified descending
select file).FirstOrDefault();
}
// detect all files in the directory
public void listFile(IEnumerable<IListFileItem> results)
{
foreach (IListFileItem fileItem in results)
{
if (fileItem.GetType() == typeof(CloudFileDirectory))
{
CloudFileDirectory directory = (CloudFileDirectory)fileItem;
var res = directory.ListFilesAndDirectories();
listFile(res);
}
else
{
CloudFile file = (CloudFile)fileItem;
file.FetchAttributes();
list.Add(file);
}
}
}
但就我所见,IListFileItem没有LastModified属性…是的,看起来您试图将其视为来自本地文件系统的内容。请尝试将其强制转换为CloudFile这包含您要查找的属性:@VisualBean So。。。有一个答案…我试着用cast仍然它的空更新问题请检查,但我不想添加所有文件夹中的所有文件。我只想添加那些来自最新文件夹的文件。例如-文件夹是Main/12 Main/13 Main/14,而我只需要Main/14中的文件,并将检查此文件夹中的最新文件。因为所有文件夹中的所有文件都会花费更多的时间,因为我有数千个文件。我想我们可以使用OrderByDestinging=>t.Uri.AbsolutePath转到Main/14文件夹,然后添加Main/14中的所有文件,并使用LastModified属性对其进行描述?如何在你的ans代码中使用它?你能帮忙吗?@Neo当然,但我有几个问题。如何判断哪个文件夹是最新的,只是文件夹名称,如绝对路径或修改时间?如果是修改时间,最新文件夹位于何处,就在共享根目录下还是在子文件夹中?@Neo感谢您接受我的回答,我有一些建议。您的答案代码是检测1.root中的所有文件,即sourcename dir 2中的所有文件。每个级别的最新子目录。所以您计划只检查最新目录中的文件,以查找最后修改的文件,对吗?但有一个问题,当我们在一个目录中更新/修改/删除一个文件时,目录的上次修改时间并没有像文件一样改变。如果该文件上载到用该文件创建的新目录,您的代码应该可以工作,否则您可能会错过真正的最新文件,在这种情况下,我认为我们需要获取目录中的所有文件。@Neo可能是出于设计,看起来只有对文件夹本身的操作才能更新修改的时间。有人问。
List<CloudFile> list = new List<CloudFile>();
public void Test()
{
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["storageConnectionString"]);
CloudFileClient fileClient = cloudStorageAccount.CreateCloudFileClient();
CloudFileShare fileShare =
fileClient.GetShareReference(ConfigurationManager.AppSettings["shareName"]);
var sourceName = fileShare.GetRootDirectoryReference().GetDirectoryReference((ConfigurationManager.AppSettings["sourceName"]));
IEnumerable<IListFileItem> fileList = sourceName.ListFilesAndDirectories();
listFile(fileList);
var test = (from file in list
orderby file.Properties.LastModified descending
select file).FirstOrDefault();
}
// detect all files in the directory
public void listFile(IEnumerable<IListFileItem> results)
{
foreach (IListFileItem fileItem in results)
{
if (fileItem.GetType() == typeof(CloudFileDirectory))
{
CloudFileDirectory directory = (CloudFileDirectory)fileItem;
var res = directory.ListFilesAndDirectories();
listFile(res);
}
else
{
CloudFile file = (CloudFile)fileItem;
file.FetchAttributes();
list.Add(file);
}
}
}
public static void CheckDate()
{
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["storageConnectionString"]);
CloudFileClient fileClient = cloudStorageAccount.CreateCloudFileClient();
CloudFileShare fileShare =
fileClient.GetShareReference(ConfigurationManager.AppSettings["shareName"]);
var sourceName = fileShare.GetRootDirectoryReference().GetDirectoryReference((ConfigurationManager.AppSettings["sourceName"]));
IEnumerable<IListFileItem> fileList = sourceName.ListFilesAndDirectories();
listFile(fileList);
var latestFile = (from file in filedataList
orderby file.Properties.LastModified descending
select file).FirstOrDefault();
Console.WriteLine(" LastModified Datetime - " + latestFile.Properties.LastModified.Value.DateTime);
}
public static void listFile(IEnumerable<IListFileItem> results)
{
foreach (var item in results)
{
if (item.GetType() == typeof(CloudFileDirectory))
{
CloudFileDirectory dir = (CloudFileDirectory)item;
dir.FetchAttributes();
dirList.Add(dir);
}
else
{
CloudFile file = (CloudFile)item;
file.FetchAttributes();
filedataList.Add(file);
}
}
if (dirList.Count > 0)
{
var latestDir = (from dir in dirList
orderby dir.Properties.LastModified descending
select dir).FirstOrDefault();
dirList.Clear();
var result = latestDir.ListFilesAndDirectories();
listFile(result);
}
}