Skip to content

Commit d3a5272

Browse files
author
Cory Leach
committed
Added ability to get files only with a specific extension
1 parent 9087c7b commit d3a5272

File tree

2 files changed

+44
-44
lines changed

2 files changed

+44
-44
lines changed

Runtime/SaveLoadManager.cs

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,18 @@ public class SaveLoadManager : ScriptableObject
1313
{
1414
[Header("Settings"),SerializeField] private string defaultFolder = "SaveData";
1515
public string DefaultFolder => defaultFolder;
16-
16+
1717
[SerializeField] private string baseFolder = "GameData";
1818
public string BaseFolder => baseFolder;
19-
19+
2020
[SerializeField] private SerializationMethodType saveMethod = SerializationMethodType.Default;
2121

2222
[Header("Encryption"),SerializeField] protected string key = string.Empty;
2323
public string Key => key;
24-
24+
2525
[SerializeField] protected string salt = string.Empty;
2626
public string Salt => salt;
27-
27+
2828
private Dictionary<SerializationMethodType, ISerializationMethod> _methods;
2929

3030
private void OnEnable()
@@ -53,10 +53,10 @@ public static SaveLoadManager Create(string baseFolder, string defaultFolder, Se
5353
instance.key = key;
5454
instance.salt = salt;
5555
instance.saveMethod = saveMethod;
56-
56+
5757
return instance;
5858
}
59-
59+
6060
/// <summary>
6161
/// Save an object to disk
6262
/// </summary>
@@ -77,14 +77,15 @@ public void Save(object obj, string filename, string folder = null)
7777
/// Gets the list of save files that have been created
7878
/// </summary>
7979
/// <param name="folder">sub folder</param>
80+
/// <param name="extension">include only files with this extension</param>
8081
/// <returns>list of file names (excludes the path)</returns>
81-
public string[] GetFiles(string folder = null)
82+
public string[] GetFiles(string folder = null, string extension = null)
8283
{
8384
if (string.IsNullOrEmpty(folder))
8485
{
8586
folder = defaultFolder;
8687
}
87-
return SaveLoadUtility.GetSavedFiles(folder,baseFolder);
88+
return SaveLoadUtility.GetSavedFiles(folder,baseFolder, extension);
8889
}
8990

9091
/// <summary>
@@ -119,7 +120,7 @@ public T Copy<T>(T obj)
119120
var saveLoadMethod = GetSaveLoadMethod(saveMethod);
120121
return (T)saveLoadMethod.Copy(obj);
121122
}
122-
123+
123124
/// <summary>
124125
/// Load an object from disk
125126
/// </summary>
@@ -162,7 +163,7 @@ public void DeleteSave(string filename, string folder = null)
162163
}
163164
SaveLoadUtility.DeleteSavedFile(filename,folder, baseFolder);
164165
}
165-
166+
166167
/// <summary>
167168
/// Save object to file and specify the method of save/load
168169
/// </summary>
@@ -217,7 +218,7 @@ public void SaveUnityObject(UnityEngine.Object unityObj, string filename, string
217218
{
218219
jsonData = JsonUtility.ToJson(unityObj)
219220
};
220-
221+
221222
Save(savedObj,filename,folder);
222223
}
223224

@@ -233,12 +234,12 @@ public void SaveUnityObject(UnityEngine.Object unityObj, string filename, string
233234
public bool LoadUnityObjectOverwrite(UnityEngine.Object objectToOverwrite, string filename, string folder = null)
234235
{
235236
var savedObj = Load<JsonSerializedUnityObject>(filename, folder);
236-
237+
237238
if (savedObj == null || string.IsNullOrEmpty(savedObj.jsonData))
238239
{
239240
return false;
240241
}
241-
242+
242243
JsonUtility.FromJsonOverwrite(savedObj.jsonData,objectToOverwrite);
243244
return true;
244245
}
@@ -253,7 +254,7 @@ public void CopyUnityObjectOverwrite(UnityEngine.Object toCopy, UnityEngine.Obje
253254
var jsonData = JsonUtility.ToJson(toCopy);
254255
JsonUtility.FromJsonOverwrite(jsonData,toOverwrite);
255256
}
256-
257+
257258
/// <summary>
258259
/// JsonSerializedUnityObject
259260
/// Wrapper for json data created when using Unity's JsonUtility to serialize an object derived from UnityEngine.Object
@@ -280,7 +281,7 @@ public void SetCustomSerializationMethod(ISerializationMethod customSerializatio
280281
}
281282
_methods[SerializationMethodType.Custom] = customSerializationMethod;
282283
}
283-
284+
284285
private ISerializationMethod GetSaveLoadMethod(SerializationMethodType methodType)
285286
{
286287
if (_methods == null)
@@ -305,14 +306,14 @@ private ISerializationMethod GetSaveLoadMethod(SerializationMethodType methodTyp
305306
case SerializationMethodType.UnityJson:
306307
method = new SerializationMethodUnityJson();
307308
break;
308-
309+
309310
case SerializationMethodType.BinaryEncrypted:
310311
method = new SerializationMethodBinaryEncrypted(key,salt);
311312
break;
312313
case SerializationMethodType.UnityJsonEncrypted:
313314
method = new SerializationMethodUnityJsonEncrypted(key,salt);
314315
break;
315-
316+
316317
#if JSON_DOT_NET
317318
case SerializationMethodType.JsonDotNet:
318319
method = new SerializationMethodJsonDotNet();
@@ -321,19 +322,17 @@ private ISerializationMethod GetSaveLoadMethod(SerializationMethodType methodTyp
321322
method = new SerializationMethodJsonDotNetEncrypted(key,salt);
322323
break;
323324
#endif
324-
325+
325326
case SerializationMethodType.Custom:
326327
throw new MissingComponentException("SerializationMethodType is Custom but no custom ISerializationMethod was found.");
327328
default:
328329
throw new ArgumentOutOfRangeException(nameof(methodType), methodType, "SaveLoadMethodType not supported");
329330
}
330331

331332
_methods[methodType] = method;
332-
333+
333334
return method;
334335
}
335-
336-
}
337-
}
338-
339336

337+
}
338+
}

Runtime/SaveLoadUtility.cs

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ public static class SaveLoadUtility
1010
//Default folder name will be used if none is provided.
1111
private const string DefaultFolderName = "SaveLoad";
1212
private const string DefaultBaseFolderPath = "GameData";
13-
13+
1414
public static string GetSavePath(string folderName = null, string baseFolderPath = null)
1515
{
1616
return GetRuntimeSavePath(folderName, baseFolderPath);
1717
}
18-
18+
1919
public static string GetRuntimeSavePath(string folderName = null, string baseFolderPath = null)
2020
{
2121
if (string.IsNullOrEmpty(folderName))
@@ -34,17 +34,17 @@ public static string GetRuntimeSavePath(string folderName = null, string baseFol
3434
}
3535

3636
/// <summary>
37-
///
37+
///
3838
/// </summary>
3939
/// <param name="fileName"></param>
4040
/// <returns></returns>
4141
private static string GetSaveFileName(string fileName)
4242
{
4343
return fileName;
4444
}
45-
45+
4646
/// <summary>
47-
///
47+
///
4848
/// </summary>
4949
/// <param name="saveObject"></param>
5050
/// <param name="serializationMethod"></param>
@@ -55,7 +55,7 @@ public static void Save(object saveObject, ISerializationMethod serializationMet
5555
{
5656
var savePath = GetSavePath(folderName,baseFolderPath);
5757
var saveFilename = GetSaveFileName(filename);
58-
58+
5959
//Create directory if it does not exist
6060
if (!Directory.Exists(savePath))
6161
{
@@ -95,43 +95,46 @@ public static object Load(System.Type objectType, ISerializationMethod serializa
9595
returnObject = serializationMethod.Load(objectType, saveFile);
9696
saveFile.Close();
9797
}
98-
98+
9999
return returnObject;
100100
}
101-
101+
102102
/// <summary>
103103
/// Enumerate files in the save directory
104104
/// </summary>
105105
/// <param name="folderName">folder containing the save files</param>
106106
/// <param name="baseFolderPath">base path to the folder</param>
107+
/// <param name="extension">include only files with the specified extension</param>
107108
/// <returns>list of file names</returns>
108-
public static IEnumerable<string> EnumerateSavedFiles(string folderName = null, string baseFolderPath = null)
109+
public static IEnumerable<string> EnumerateSavedFiles(string folderName = null, string baseFolderPath = null, string extension = null)
109110
{
110111
var savePath = GetSavePath(folderName,baseFolderPath);
111-
112+
112113
//If directory does not exist we're done
113114
if (!Directory.Exists(savePath))
114115
{
115116
yield break;
116117
}
117-
118-
foreach ( var file in Directory.EnumerateFiles(savePath,"*",SearchOption.AllDirectories) )
118+
119+
var searchPattern = string.IsNullOrEmpty(extension) ? "*" : $"*.{extension}";
120+
foreach ( var file in Directory.EnumerateFiles(savePath,searchPattern,SearchOption.AllDirectories) )
119121
{
120122
yield return Path.GetFileName(file);
121123
}
122124
}
123-
125+
124126
/// <summary>
125127
/// Creates an array list of save files in the given folder and path
126128
/// </summary>
127-
/// <param name="folderName"></param>
128-
/// <param name="baseFolderPath"></param>
129+
/// <param name="folderName">folder containing the save files</param>
130+
/// <param name="baseFolderPath">base path to the folder</param>
131+
/// <param name="extension">include only files with this extension</param>
129132
/// <returns>Array of file names</returns>
130-
public static string[] GetSavedFiles(string folderName = null, string baseFolderPath = null)
133+
public static string[] GetSavedFiles(string folderName = null, string baseFolderPath = null, string extension = null)
131134
{
132-
return EnumerateSavedFiles(folderName, baseFolderPath).ToArray();
135+
return EnumerateSavedFiles(folderName, baseFolderPath, extension).ToArray();
133136
}
134-
137+
135138
/// <summary>
136139
/// Check if a saved file exists
137140
/// </summary>
@@ -175,10 +178,8 @@ public static void DeleteDirectory(string path)
175178
{
176179
DeleteDirectory(dir);
177180
}
178-
181+
179182
Directory.Delete(path,false);
180183
}
181184
}
182185
}
183-
184-

0 commit comments

Comments
 (0)