@@ -180,6 +180,7 @@ public async void UpdateSortOptionStatus()
180
180
NotifyPropertyChanged ( nameof ( IsSortedBySize ) ) ;
181
181
NotifyPropertyChanged ( nameof ( IsSortedByOriginalPath ) ) ;
182
182
NotifyPropertyChanged ( nameof ( IsSortedByDateDeleted ) ) ;
183
+ NotifyPropertyChanged ( nameof ( IsSortedByDateCreated ) ) ;
183
184
await OrderFilesAndFoldersAsync ( ) ;
184
185
await ApplyFilesAndFoldersChangesAsync ( ) ;
185
186
}
@@ -244,6 +245,19 @@ public bool IsSortedByDate
244
245
}
245
246
}
246
247
248
+ public bool IsSortedByDateCreated
249
+ {
250
+ get => FolderSettings . DirectorySortOption == SortOption . DateCreated ;
251
+ set
252
+ {
253
+ if ( value )
254
+ {
255
+ FolderSettings . DirectorySortOption = SortOption . DateCreated ;
256
+ NotifyPropertyChanged ( nameof ( IsSortedByDateCreated ) ) ;
257
+ }
258
+ }
259
+ }
260
+
247
261
public bool IsSortedByType
248
262
{
249
263
get => FolderSettings . DirectorySortOption == SortOption . FileType ;
@@ -586,6 +600,10 @@ private Task OrderFilesAndFoldersAsync()
586
600
orderFunc = item => item . ItemDateModifiedReal ;
587
601
break ;
588
602
603
+ case SortOption . DateCreated :
604
+ orderFunc = item => item . ItemDateCreatedReal ;
605
+ break ;
606
+
589
607
case SortOption . FileType :
590
608
orderFunc = item => item . ItemType ;
591
609
break ;
@@ -1042,6 +1060,7 @@ public async Task EnumerateItemsFromSpecialFolderAsync(string path)
1042
1060
ItemPropertiesInitialized = true ,
1043
1061
ItemName = ApplicationData . Current . LocalSettings . Values . Get ( "RecycleBin_Title" , "Recycle Bin" ) ,
1044
1062
ItemDateModifiedReal = DateTimeOffset . Now , // Fake for now
1063
+ ItemDateCreatedReal = DateTimeOffset . MinValue , // Fake for now
1045
1064
ItemType = "FileFolderListItem" . GetLocalized ( ) ,
1046
1065
LoadFolderGlyph = true ,
1047
1066
FileImage = null ,
@@ -1169,12 +1188,14 @@ await DialogDisplayHelper.ShowDialogAsync(
1169
1188
1170
1189
if ( enumFromStorageFolder )
1171
1190
{
1191
+ var basicProps = await rootFolder . GetBasicPropertiesAsync ( ) ;
1192
+ var extraProps = await basicProps . RetrievePropertiesAsync ( new [ ] { "System.DateCreated" } ) ;
1172
1193
CurrentFolder = new ListedItem ( rootFolder . FolderRelativeId , returnformat )
1173
1194
{
1174
1195
PrimaryItemAttribute = StorageItemTypes . Folder ,
1175
1196
ItemPropertiesInitialized = true ,
1176
1197
ItemName = rootFolder . Name ,
1177
- ItemDateModifiedReal = ( await rootFolder . GetBasicPropertiesAsync ( ) ) . DateModified ,
1198
+ ItemDateModifiedReal = basicProps . DateModified ,
1178
1199
ItemType = rootFolder . DisplayType ,
1179
1200
LoadFolderGlyph = true ,
1180
1201
FileImage = null ,
@@ -1184,6 +1205,10 @@ await DialogDisplayHelper.ShowDialogAsync(
1184
1205
FileSize = null ,
1185
1206
FileSizeBytes = 0
1186
1207
} ;
1208
+ if ( DateTimeOffset . TryParse ( extraProps [ "System.DateCreated" ] as string , out var dateCreated ) )
1209
+ {
1210
+ CurrentFolder . ItemDateCreatedReal = dateCreated ;
1211
+ }
1187
1212
await EnumFromStorageFolderAsync ( path , skipItems ) ;
1188
1213
return true ;
1189
1214
}
@@ -1198,13 +1223,20 @@ await DialogDisplayHelper.ShowDialogAsync(
1198
1223
return ( hFileTsk , findDataTsk ) ;
1199
1224
} ) . WithTimeoutAsync ( TimeSpan . FromSeconds ( 5 ) ) ;
1200
1225
1201
- DateTime itemDate = DateTime . UtcNow ;
1226
+ var itemModifiedDate = DateTime . UtcNow ;
1227
+ var itemCreatedDate = DateTime . MinValue ;
1202
1228
try
1203
1229
{
1204
- FileTimeToSystemTime ( ref findData . ftLastWriteTime , out SYSTEMTIME systemTimeOutput ) ;
1205
- itemDate = new DateTime (
1206
- systemTimeOutput . Year , systemTimeOutput . Month , systemTimeOutput . Day ,
1207
- systemTimeOutput . Hour , systemTimeOutput . Minute , systemTimeOutput . Second , systemTimeOutput . Milliseconds ,
1230
+ FileTimeToSystemTime ( ref findData . ftLastWriteTime , out var systemModifiedTimeOutput ) ;
1231
+ itemModifiedDate = new DateTime (
1232
+ systemModifiedTimeOutput . Year , systemModifiedTimeOutput . Month , systemModifiedTimeOutput . Day ,
1233
+ systemModifiedTimeOutput . Hour , systemModifiedTimeOutput . Minute , systemModifiedTimeOutput . Second , systemModifiedTimeOutput . Milliseconds ,
1234
+ DateTimeKind . Utc ) ;
1235
+
1236
+ FileTimeToSystemTime ( ref findData . ftCreationTime , out SYSTEMTIME systemCreatedTimeOutput ) ;
1237
+ itemCreatedDate = new DateTime (
1238
+ systemCreatedTimeOutput . Year , systemCreatedTimeOutput . Month , systemCreatedTimeOutput . Day ,
1239
+ systemCreatedTimeOutput . Hour , systemCreatedTimeOutput . Minute , systemCreatedTimeOutput . Second , systemCreatedTimeOutput . Milliseconds ,
1208
1240
DateTimeKind . Utc ) ;
1209
1241
}
1210
1242
catch ( ArgumentException ) { }
@@ -1222,7 +1254,8 @@ await DialogDisplayHelper.ShowDialogAsync(
1222
1254
PrimaryItemAttribute = StorageItemTypes . Folder ,
1223
1255
ItemPropertiesInitialized = true ,
1224
1256
ItemName = Path . GetFileName ( path . TrimEnd ( '\\ ' ) ) ,
1225
- ItemDateModifiedReal = itemDate ,
1257
+ ItemDateModifiedReal = itemModifiedDate ,
1258
+ ItemDateCreatedReal = itemCreatedDate ,
1226
1259
ItemType = "FileFolderListItem" . GetLocalized ( ) ,
1227
1260
LoadFolderGlyph = true ,
1228
1261
FileImage = null ,
@@ -1697,6 +1730,7 @@ public ListedItem AddFileOrFolderFromShellFile(ShellFileItem item, string dateRe
1697
1730
PrimaryItemAttribute = StorageItemTypes . Folder ,
1698
1731
ItemName = item . FileName ,
1699
1732
ItemDateModifiedReal = item . ModifiedDate ,
1733
+ ItemDateCreatedReal = item . CreatedDate ,
1700
1734
ItemDateDeletedReal = item . RecycleDate ,
1701
1735
ItemType = item . FileType ,
1702
1736
IsHiddenItem = false ,
@@ -1749,6 +1783,7 @@ public ListedItem AddFileOrFolderFromShellFile(ShellFileItem item, string dateRe
1749
1783
Opacity = 1 ,
1750
1784
ItemName = itemName ,
1751
1785
ItemDateModifiedReal = item . ModifiedDate ,
1786
+ ItemDateCreatedReal = item . CreatedDate ,
1752
1787
ItemDateDeletedReal = item . RecycleDate ,
1753
1788
ItemType = item . FileType ,
1754
1789
ItemPath = item . RecyclePath , // this is the true path on disk so other stuff can work as is
@@ -1911,13 +1946,20 @@ private ListedItem AddFolder(WIN32_FIND_DATA findData, string pathRoot, string d
1911
1946
return null ;
1912
1947
}
1913
1948
1914
- DateTime itemDate ;
1949
+ DateTime itemModifiedDate ;
1950
+ DateTime itemCreatedDate ;
1915
1951
try
1916
1952
{
1917
- FileTimeToSystemTime ( ref findData . ftLastWriteTime , out SYSTEMTIME systemTimeOutput ) ;
1918
- itemDate = new DateTime (
1919
- systemTimeOutput . Year , systemTimeOutput . Month , systemTimeOutput . Day ,
1920
- systemTimeOutput . Hour , systemTimeOutput . Minute , systemTimeOutput . Second , systemTimeOutput . Milliseconds ,
1953
+ FileTimeToSystemTime ( ref findData . ftLastWriteTime , out SYSTEMTIME systemModifiedTimeOutput ) ;
1954
+ itemModifiedDate = new DateTime (
1955
+ systemModifiedTimeOutput . Year , systemModifiedTimeOutput . Month , systemModifiedTimeOutput . Day ,
1956
+ systemModifiedTimeOutput . Hour , systemModifiedTimeOutput . Minute , systemModifiedTimeOutput . Second , systemModifiedTimeOutput . Milliseconds ,
1957
+ DateTimeKind . Utc ) ;
1958
+
1959
+ FileTimeToSystemTime ( ref findData . ftCreationTime , out SYSTEMTIME systemCreatedTimeOutput ) ;
1960
+ itemCreatedDate = new DateTime (
1961
+ systemCreatedTimeOutput . Year , systemCreatedTimeOutput . Month , systemCreatedTimeOutput . Day ,
1962
+ systemCreatedTimeOutput . Hour , systemCreatedTimeOutput . Minute , systemCreatedTimeOutput . Second , systemCreatedTimeOutput . Milliseconds ,
1921
1963
DateTimeKind . Utc ) ;
1922
1964
}
1923
1965
catch ( ArgumentException )
@@ -1939,7 +1981,8 @@ private ListedItem AddFolder(WIN32_FIND_DATA findData, string pathRoot, string d
1939
1981
{
1940
1982
PrimaryItemAttribute = StorageItemTypes . Folder ,
1941
1983
ItemName = findData . cFileName ,
1942
- ItemDateModifiedReal = itemDate ,
1984
+ ItemDateModifiedReal = itemModifiedDate ,
1985
+ ItemDateCreatedReal = itemCreatedDate ,
1943
1986
ItemType = "FileFolderListItem" . GetLocalized ( ) ,
1944
1987
LoadFolderGlyph = true ,
1945
1988
FileImage = null ,
@@ -2129,14 +2172,16 @@ public void AddItemsToCollectionAsync(string path, string previousDir, bool useC
2129
2172
private async Task < ListedItem > AddFolderAsync ( StorageFolder folder , string dateReturnFormat )
2130
2173
{
2131
2174
var basicProperties = await folder . GetBasicPropertiesAsync ( ) ;
2132
-
2175
+ var extraProps = await basicProperties . RetrievePropertiesAsync ( new [ ] { "System.DateCreated" } ) ;
2176
+ DateTimeOffset . TryParse ( extraProps [ "System.DateCreated" ] as string , out var dateCreated ) ;
2133
2177
if ( ! addFilesCTS . IsCancellationRequested )
2134
2178
{
2135
2179
return new ListedItem ( folder . FolderRelativeId , dateReturnFormat )
2136
2180
{
2137
2181
PrimaryItemAttribute = StorageItemTypes . Folder ,
2138
2182
ItemName = folder . Name ,
2139
2183
ItemDateModifiedReal = basicProperties . DateModified ,
2184
+ ItemDateCreatedReal = dateCreated ,
2140
2185
ItemType = folder . DisplayType ,
2141
2186
IsHiddenItem = false ,
2142
2187
Opacity = 1 ,
@@ -2156,10 +2201,12 @@ private async Task<ListedItem> AddFolderAsync(StorageFolder folder, string dateR
2156
2201
private async Task < ListedItem > AddFileAsync ( StorageFile file , string dateReturnFormat , bool suppressThumbnailLoading = false )
2157
2202
{
2158
2203
var basicProperties = await file . GetBasicPropertiesAsync ( ) ;
2204
+ var extraProperties = await basicProperties . RetrievePropertiesAsync ( new [ ] { "System.DateCreated" } ) ;
2159
2205
// Display name does not include extension
2160
2206
var itemName = string . IsNullOrEmpty ( file . DisplayName ) || shouldDisplayFileExtensions ?
2161
2207
file . Name : file . DisplayName ;
2162
- var itemDate = basicProperties . DateModified ;
2208
+ var itemModifiedDate = basicProperties . DateModified ;
2209
+ DateTimeOffset . TryParse ( extraProperties [ "System.DateCreated" ] as string , out var itemCreatedDate ) ;
2163
2210
var itemPath = string . IsNullOrEmpty ( file . Path ) ? Path . Combine ( currentStorageFolder . Path , file . Name ) : file . Path ;
2164
2211
var itemSize = ByteSize . FromBytes ( basicProperties . Size ) . ToBinaryString ( ) . ConvertSizeAbbreviation ( ) ;
2165
2212
var itemSizeBytes = basicProperties . Size ;
@@ -2247,7 +2294,8 @@ private async Task<ListedItem> AddFileAsync(StorageFile file, string dateReturnF
2247
2294
LoadFileIcon = itemThumbnailImgVis ,
2248
2295
LoadFolderGlyph = itemFolderImgVis ,
2249
2296
ItemName = itemName ,
2250
- ItemDateModifiedReal = itemDate ,
2297
+ ItemDateModifiedReal = itemModifiedDate ,
2298
+ ItemDateCreatedReal = itemCreatedDate ,
2251
2299
ItemType = itemType ,
2252
2300
ItemPath = itemPath ,
2253
2301
FileSize = itemSize ,
0 commit comments