private IEnumerable <AuditLogCollection.LogInfo> FindLogFolders(Folder rootFolder, bool includeEmptyFolders)
 {
     if (rootFolder.HasSubfolders)
     {
         using (QueryResult queryResult = rootFolder.FolderQuery(FolderQueryFlags.None, null, AuditLogCollection.SortByDisplayName, AuditLogCollection.FolderProperties))
         {
             object[][] rows;
             do
             {
                 rows = queryResult.GetRows(100);
                 if (rows != null && rows.Length > 0)
                 {
                     foreach (object[] row in rows)
                     {
                         DateTime logRangeStart;
                         DateTime logRangeEnd;
                         bool     validLogSubfolder = AuditLogCollection.TryParseLogRange(row[0] as string, out logRangeStart, out logRangeEnd);
                         int      itemCount         = AuditLogCollection.GetItemCount(row[2]);
                         if (validLogSubfolder && (includeEmptyFolders || itemCount > 0))
                         {
                             yield return(new AuditLogCollection.LogInfo
                             {
                                 FolderId = (StoreId)row[1],
                                 RangeStart = logRangeStart,
                                 RangeEnd = logRangeEnd,
                                 ItemCount = itemCount
                             });
                         }
                     }
                 }
             }while (rows != null && rows.Length > 0);
         }
     }
     yield break;
 }
        public static string GetLogFolderNameAndRange(DateTime timestamp, out DateTime rangeStart, out DateTime rangeEnd)
        {
            string text = timestamp.ToString(AuditLogCollection.DailyLogFolderNameFormat);

            if (!AuditLogCollection.TryParseLogRange(text, out rangeStart, out rangeEnd))
            {
                throw new InvalidOperationException("Invalid log folder name");
            }
            return(text);
        }