Untitled
unknown
plain_text
a year ago
28 kB
2
Indexable
Never
using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; using UnityEngine; using UnityEngine.Networking; using BayatGames.SaveGameFree.Serializers; using BayatGames.SaveGameFree.Encoders; namespace BayatGames.SaveGameFree { /// <summary> /// Save game path. base paths for your save games. /// </summary> public enum SaveGamePath { /// <summary> /// The persistent data path. Application.persistentDataPath /// </summary> PersistentDataPath, /// <summary> /// The data path. Application.dataPath /// </summary> DataPath } /// <summary> /// Save Game. /// Use these APIs to Save & Load game data. /// If you are looking for Web saving and loading use SaveGameWeb. /// </summary> public static class SaveGame { /// <summary> /// Save handler. /// </summary> public delegate void SaveHandler ( object obj, string identifier, bool encode, string password, ISaveGameSerializer serializer, ISaveGameEncoder encoder, Encoding encoding, SaveGamePath path ); /// <summary> /// Load handler. /// </summary> public delegate void LoadHandler ( object loadedObj, string identifier, bool encode, string password, ISaveGameSerializer serializer, ISaveGameEncoder encoder, Encoding encoding, SaveGamePath path ); /// <summary> /// Occurs when on saved. /// </summary> public static event SaveHandler OnSaved; /// <summary> /// Occurs when on loaded. /// </summary> public static event LoadHandler OnLoaded; /// <summary> /// The save callback. /// </summary> public static SaveHandler SaveCallback; /// <summary> /// The load callback. /// </summary> public static LoadHandler LoadCallback; private static ISaveGameSerializer m_Serializer = new SaveGameJsonSerializer (); private static ISaveGameEncoder m_Encoder = new SaveGameSimpleEncoder (); private static Encoding m_Encoding = Encoding.UTF8; private static bool m_Encode = false; private static SaveGamePath m_SavePath = SaveGamePath.PersistentDataPath; private static string m_EncodePassword = "h@e#ll$o%^"; private static bool m_LogError = false; /// <summary> /// Gets or sets the serializer. /// </summary> /// <value>The serializer.</value> public static ISaveGameSerializer Serializer { get { if ( m_Serializer == null ) { m_Serializer = new SaveGameJsonSerializer (); } return m_Serializer; } set { m_Serializer = value; } } /// <summary> /// Gets or sets the encoder. /// </summary> /// <value>The encoder.</value> public static ISaveGameEncoder Encoder { get { if ( m_Encoder == null ) { m_Encoder = new SaveGameSimpleEncoder (); } return m_Encoder; } set { m_Encoder = value; } } /// <summary> /// Gets or sets the encoding. /// </summary> /// <value>The encoding.</value> public static Encoding DefaultEncoding { get { if ( m_Encoding == null ) { m_Encoding = Encoding.UTF8; } return m_Encoding; } set { m_Encoding = value; } } /// <summary> /// Gets or sets a value indicating whether this <see cref="SaveGameFree.SaveGame"/> encrypt data by default. /// </summary> /// <value><c>true</c> if encode; otherwise, <c>false</c>.</value> public static bool Encode { get { return m_Encode; } set { m_Encode = value; } } /// <summary> /// Gets or sets the save path. /// </summary> /// <value>The save path.</value> public static SaveGamePath SavePath { get { return m_SavePath; } set { m_SavePath = value; } } /// <summary> /// Gets or sets the encryption password. /// </summary> /// <value>The encryption password.</value> public static string EncodePassword { get { return m_EncodePassword; } set { m_EncodePassword = value; } } /// <summary> /// Gets or sets a value indicating whether this <see cref="SaveGameFree.SaveGame"/> log error. /// </summary> /// <value><c>true</c> if log error; otherwise, <c>false</c>.</value> public static bool LogError { get { return m_LogError; } set { m_LogError = value; } } /// <summary> /// Saves data using the identifier. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="obj">Object to save.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static void Save<T> ( string identifier, T obj ) { Save<T> ( identifier, obj, Encode, EncodePassword, Serializer, Encoder, DefaultEncoding, SavePath ); } /// <summary> /// Save the specified identifier, obj, encode and encodePassword. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="obj">Object.</param> /// <param name="encode">If set to <c>true</c> encode.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static void Save<T> ( string identifier, T obj, bool encode ) { Save<T> ( identifier, obj, encode, EncodePassword, Serializer, Encoder, DefaultEncoding, SavePath ); } /// <summary> /// Save the specified identifier, obj and encodePassword. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="obj">Object.</param> /// <param name="encodePassword">Encode password.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static void Save<T> ( string identifier, T obj, bool encode, string encodePassword ) { Save <T> ( identifier, obj, encode, encodePassword, Serializer, Encoder, DefaultEncoding, SavePath ); } /// <summary> /// Save the specified identifier, obj and serializer. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="obj">Object.</param> /// <param name="serializer">Serializer.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static void Save<T> ( string identifier, T obj, ISaveGameSerializer serializer ) { Save<T> ( identifier, obj, Encode, EncodePassword, serializer, Encoder, DefaultEncoding, SavePath ); } /// <summary> /// Save the specified identifier, obj and encoder. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="obj">Object.</param> /// <param name="encoder">Encoder.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static void Save<T> ( string identifier, T obj, ISaveGameEncoder encoder ) { Save<T> ( identifier, obj, Encode, EncodePassword, Serializer, encoder, DefaultEncoding, SavePath ); } /// <summary> /// Save the specified identifier, obj and encoding. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="obj">Object.</param> /// <param name="encoding">Encoding.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static void Save<T> ( string identifier, T obj, Encoding encoding ) { Save<T> ( identifier, obj, Encode, EncodePassword, Serializer, Encoder, encoding, SavePath ); } /// <summary> /// Save the specified identifier, obj and savePath. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="obj">Object.</param> /// <param name="savePath">Save path.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static void Save<T> ( string identifier, T obj, SaveGamePath savePath ) { Save<T> ( identifier, obj, Encode, EncodePassword, Serializer, Encoder, DefaultEncoding, savePath ); } /// <summary> /// Saves data using the identifier. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="obj">Object to save.</param> /// <param name="encode">Encrypt the data?</param> /// <param name="password">Encryption Password.</param> /// <param name="serializer">Serializer.</param> /// <param name="encoder">Encoder.</param> /// <param name="encoding">Encoding.</param> /// <param name="path">Path.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static void Save<T> ( string identifier, T obj, bool encode, string password, ISaveGameSerializer serializer, ISaveGameEncoder encoder, Encoding encoding, SaveGamePath path ) { if ( string.IsNullOrEmpty ( identifier ) ) { throw new System.ArgumentNullException ( "identifier" ); } if ( serializer == null ) { serializer = SaveGame.Serializer; } if ( encoding == null ) { encoding = SaveGame.DefaultEncoding; } string filePath = ""; if ( !IsFilePath ( identifier ) ) { switch ( path ) { default: case SaveGamePath.PersistentDataPath: filePath = string.Format ( "{0}/{1}", Application.persistentDataPath, identifier ); break; case SaveGamePath.DataPath: filePath = string.Format ( "{0}/{1}", Application.dataPath, identifier ); break; } } else { filePath = identifier; } if ( obj == null ) { obj = default(T); } Stream stream = null; #if !UNITY_SAMSUNGTV && !UNITY_TVOS && !UNITY_WEBGL #if UNITY_WSA || UNITY_WINRT UnityEngine.Windows.Directory.CreateDirectory ( filePath ); #else Directory.CreateDirectory ( Path.GetDirectoryName ( filePath ) ); #endif #endif if ( encode ) { stream = new MemoryStream (); } else { #if !UNITY_SAMSUNGTV && !UNITY_TVOS && !UNITY_WEBGL if ( IOSupported () ) { #if UNITY_WSA || UNITY_WINRT stream = new MemoryStream (); #else stream = File.Create ( filePath ); #endif } else { stream = new MemoryStream (); } #else stream = new MemoryStream (); #endif } serializer.Serialize ( obj, stream, encoding ); if ( encode ) { string data = encoding.GetString ( ( ( MemoryStream )stream ).ToArray () ); string encoded = encoder.Encode ( data, password ); #if !UNITY_SAMSUNGTV && !UNITY_TVOS && !UNITY_WEBGL if ( IOSupported () ) { #if UNITY_WSA || UNITY_WINRT UnityEngine.Windows.File.WriteAllBytes ( filePath, encoding.GetBytes ( encoded ) ); #else File.WriteAllText ( filePath, encoded, encoding ); #endif } else { PlayerPrefs.SetString ( filePath, encoded ); PlayerPrefs.Save (); } #else PlayerPrefs.SetString ( filePath, encoded ); PlayerPrefs.Save (); #endif } else if ( !IOSupported () ) { string data = encoding.GetString ( ( ( MemoryStream )stream ).ToArray () ); PlayerPrefs.SetString ( filePath, data ); PlayerPrefs.Save (); } stream.Dispose (); if ( SaveCallback != null ) { SaveCallback.Invoke ( obj, identifier, encode, password, serializer, encoder, encoding, path ); } if ( OnSaved != null ) { OnSaved ( obj, identifier, encode, password, serializer, encoder, encoding, path ); } } /// <summary> /// Loads data using identifier. /// </summary> /// <param name="identifier">Identifier.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static T Load<T> ( string identifier ) { return Load<T> ( identifier, default(T), Encode, EncodePassword, Serializer, Encoder, DefaultEncoding, SavePath ); } /// <summary> /// Load the specified identifier and defaultValue. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="defaultValue">Default value.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static T Load<T> ( string identifier, T defaultValue ) { return Load<T> ( identifier, defaultValue, Encode, EncodePassword, Serializer, Encoder, DefaultEncoding, SavePath ); } /// <summary> /// Load the specified identifier and encodePassword. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="encodePassword">Encode password.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static T Load<T> ( string identifier, bool encode, string encodePassword ) { return Load<T> ( identifier, default(T), encode, encodePassword, Serializer, Encoder, DefaultEncoding, SavePath ); } /// <summary> /// Load the specified identifier and serializer. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="serializer">Serializer.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static T Load<T> ( string identifier, ISaveGameSerializer serializer ) { return Load<T> ( identifier, default(T), Encode, EncodePassword, serializer, Encoder, DefaultEncoding, SavePath ); } /// <summary> /// Load the specified identifier and encoder. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="encoder">Encoder.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static T Load<T> ( string identifier, ISaveGameEncoder encoder ) { return Load<T> ( identifier, default(T), Encode, EncodePassword, Serializer, encoder, DefaultEncoding, SavePath ); } /// <summary> /// Load the specified identifier and encoding. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="encoding">Encoding.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static T Load<T> ( string identifier, Encoding encoding ) { return Load<T> ( identifier, default(T), Encode, EncodePassword, Serializer, Encoder, encoding, SavePath ); } /// <summary> /// Load the specified identifier and savePath. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="savePath">Save path.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static T Load<T> ( string identifier, SaveGamePath savePath ) { return Load<T> ( identifier, default(T), Encode, EncodePassword, Serializer, Encoder, DefaultEncoding, savePath ); } /// <summary> /// Load the specified identifier, defaultValue and encode. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="defaultValue">Default value.</param> /// <param name="encode">If set to <c>true</c> encode.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static T Load<T> ( string identifier, T defaultValue, bool encode ) { return Load<T> ( identifier, defaultValue, encode, EncodePassword, Serializer, Encoder, DefaultEncoding, SavePath ); } /// <summary> /// Load the specified identifier, defaultValue and encodePassword. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="defaultValue">Default value.</param> /// <param name="encodePassword">Encode password.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static T Load<T> ( string identifier, T defaultValue, string encodePassword ) { return Load<T> ( identifier, defaultValue, Encode, encodePassword, Serializer, Encoder, DefaultEncoding, SavePath ); } /// <summary> /// Load the specified identifier, defaultValue and serializer. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="defaultValue">Default value.</param> /// <param name="serializer">Serializer.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static T Load<T> ( string identifier, T defaultValue, ISaveGameSerializer serializer ) { return Load<T> ( identifier, defaultValue, Encode, EncodePassword, serializer, Encoder, DefaultEncoding, SavePath ); } /// <summary> /// Load the specified identifier, defaultValue and encoder. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="defaultValue">Default value.</param> /// <param name="encoder">Encoder.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static T Load<T> ( string identifier, T defaultValue, ISaveGameEncoder encoder ) { return Load<T> ( identifier, defaultValue, Encode, EncodePassword, Serializer, encoder, DefaultEncoding, SavePath ); } /// <summary> /// Load the specified identifier, defaultValue and encoding. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="defaultValue">Default value.</param> /// <param name="encoding">Encoding.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static T Load<T> ( string identifier, T defaultValue, Encoding encoding ) { return Load<T> ( identifier, defaultValue, Encode, EncodePassword, Serializer, Encoder, encoding, SavePath ); } /// <summary> /// Load the specified identifier, defaultValue and savePath. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="defaultValue">Default value.</param> /// <param name="savePath">Save path.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static T Load<T> ( string identifier, T defaultValue, SaveGamePath savePath ) { return Load<T> ( identifier, defaultValue, Encode, EncodePassword, Serializer, Encoder, DefaultEncoding, savePath ); } /// <summary> /// Loads data using identifier. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="defaultValue">Default Value.</param> /// <param name="encode">Load encrypted data? (set it to true if you have used encryption in save)</param> /// <param name="password">Encryption Password.</param> /// <param name="serializer">Serializer.</param> /// <param name="encoder">Encoder.</param> /// <param name="encoding">Encoding.</param> /// <param name="path">Path.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static T Load<T> ( string identifier, T defaultValue, bool encode, string password, ISaveGameSerializer serializer, ISaveGameEncoder encoder, Encoding encoding, SaveGamePath path ) { if ( string.IsNullOrEmpty ( identifier ) ) { throw new System.ArgumentNullException ( "identifier" ); } if ( serializer == null ) { serializer = SaveGame.Serializer; } if ( encoding == null ) { encoding = SaveGame.DefaultEncoding; } if ( defaultValue == null ) { defaultValue = default(T); } T result = defaultValue; string filePath = ""; if ( !IsFilePath ( identifier ) ) { switch ( path ) { default: case SaveGamePath.PersistentDataPath: filePath = string.Format ( "{0}/{1}", Application.persistentDataPath, identifier ); break; case SaveGamePath.DataPath: filePath = string.Format ( "{0}/{1}", Application.dataPath, identifier ); break; } } else { filePath = identifier; } #if !UNITY_SAMSUNGTV && !UNITY_TVOS && !UNITY_WEBGL if ( !Exists ( filePath, path ) ) #else if ( !Exists ( filePath, path ) ) #endif { Debug.LogWarningFormat ( "The specified identifier ({1}) does not exists. please use Exists () to check for existent before calling Load.\n" + "returning the default(T) instance.", filePath, identifier ); return result; } Stream stream = null; if ( encode ) { string data = ""; #if !UNITY_SAMSUNGTV && !UNITY_TVOS && !UNITY_WEBGL if ( IOSupported () ) { #if UNITY_WSA || UNITY_WINRT data = encoding.GetString ( UnityEngine.Windows.File.ReadAllBytes ( filePath ) ); #else data = File.ReadAllText ( filePath, encoding ); #endif } else { data = PlayerPrefs.GetString ( filePath ); } #else data = PlayerPrefs.GetString ( filePath ); #endif string decoded = encoder.Decode ( data, password ); stream = new MemoryStream ( encoding.GetBytes ( decoded ), true ); } else { #if !UNITY_SAMSUNGTV && !UNITY_TVOS && !UNITY_WEBGL if ( IOSupported () ) { #if UNITY_WSA || UNITY_WINRT stream = new MemoryStream ( UnityEngine.Windows.File.ReadAllBytes ( filePath ) ); #else stream = File.OpenRead ( filePath ); #endif } else { string data = PlayerPrefs.GetString ( filePath ); stream = new MemoryStream ( encoding.GetBytes ( data ) ); } #else string data = PlayerPrefs.GetString ( filePath ); stream = new MemoryStream ( encoding.GetBytes ( data ) ); #endif } result = serializer.Deserialize <T> ( stream, encoding ); stream.Dispose (); if ( result == null ) { result = defaultValue; } if ( LoadCallback != null ) { LoadCallback.Invoke ( result, identifier, encode, password, serializer, encoder, encoding, path ); } if ( OnLoaded != null ) { OnLoaded ( result, identifier, encode, password, serializer, encoder, encoding, path ); } return result; } /// <summary> /// Checks whether the specified identifier exists or not. /// </summary> /// <param name="identifier">Identifier.</param> public static bool Exists ( string identifier ) { return Exists ( identifier, SavePath ); } /// <summary> /// Checks whether the specified identifier exists or not. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="path">Path.</param> /// <param name="web">Check in Web?</param> /// <param name="webUsername">Web username.</param> /// <param name="webPassword">Web password.</param> /// <param name="webURL">Web URL.</param> public static bool Exists ( string identifier, SaveGamePath path ) { if ( string.IsNullOrEmpty ( identifier ) ) { throw new System.ArgumentNullException ( "identifier" ); } string filePath = ""; if ( !IsFilePath ( identifier ) ) { switch ( path ) { default: case SaveGamePath.PersistentDataPath: filePath = string.Format ( "{0}/{1}", Application.persistentDataPath, identifier ); break; case SaveGamePath.DataPath: filePath = string.Format ( "{0}/{1}", Application.dataPath, identifier ); break; } } else { filePath = identifier; } #if !UNITY_SAMSUNGTV && !UNITY_TVOS && !UNITY_WEBGL if ( IOSupported () ) { bool exists = false; #if UNITY_WSA || UNITY_WINRT exists = UnityEngine.Windows.Directory.Exists ( filePath ); #else exists = Directory.Exists ( filePath ); #endif if ( !exists ) { #if UNITY_WSA || UNITY_WINRT exists = UnityEngine.Windows.File.Exists ( filePath ); #else exists = File.Exists ( filePath ); #endif } return exists; } else { return PlayerPrefs.HasKey ( filePath ); } #else return PlayerPrefs.HasKey ( filePath ); #endif } /// <summary> /// Delete the specified identifier. /// </summary> /// <param name="identifier">Identifier.</param> public static void Delete ( string identifier ) { Delete ( identifier, SavePath ); } /// <summary> /// Delete the specified identifier and path. /// </summary> /// <param name="identifier">Identifier.</param> /// <param name="path">Path.</param> public static void Delete ( string identifier, SaveGamePath path ) { if ( string.IsNullOrEmpty ( identifier ) ) { throw new System.ArgumentNullException ( "identifier" ); } string filePath = ""; if ( !IsFilePath ( identifier ) ) { switch ( path ) { default: case SaveGamePath.PersistentDataPath: filePath = string.Format ( "{0}/{1}", Application.persistentDataPath, identifier ); break; case SaveGamePath.DataPath: filePath = string.Format ( "{0}/{1}", Application.dataPath, identifier ); break; } } else { filePath = identifier; } if ( !Exists ( filePath, path ) ) { return; } #if !UNITY_SAMSUNGTV && !UNITY_TVOS && !UNITY_WEBGL if ( IOSupported () ) { #if UNITY_WSA || UNITY_WINRT UnityEngine.Windows.File.Delete ( filePath ); #else File.Delete ( filePath ); #endif } else { PlayerPrefs.DeleteKey ( filePath ); } #else PlayerPrefs.DeleteKey ( filePath ); #endif } /// <summary> /// Clear this instance. /// Alias of DeleteAll /// </summary> public static void Clear () { DeleteAll ( SavePath ); } /// <summary> /// Clear the specified path. /// Alias of DeleteAll /// </summary> /// <param name="path">Path.</param> public static void Clear ( SaveGamePath path ) { DeleteAll ( path ); } /// <summary> /// Deletes all. /// </summary> public static void DeleteAll () { DeleteAll ( SavePath ); } /// <summary> /// Deletes all. /// </summary> /// <param name="path">Path.</param> public static void DeleteAll ( SaveGamePath path ) { string dirPath = ""; switch ( path ) { case SaveGamePath.PersistentDataPath: dirPath = Application.persistentDataPath; break; case SaveGamePath.DataPath: dirPath = Application.dataPath; break; } #if !UNITY_SAMSUNGTV && !UNITY_TVOS && !UNITY_WEBGL if ( IOSupported () ) { #if UNITY_WSA || UNITY_WINRT UnityEngine.Windows.Directory.Delete ( dirPath ); #else DirectoryInfo info = new DirectoryInfo ( dirPath ); FileInfo [] files = info.GetFiles (); for ( int i = 0; i < files.Length; i++ ) { files [ i ].Delete (); } DirectoryInfo [] dirs = info.GetDirectories (); for ( int i = 0; i < dirs.Length; i++ ) { dirs [ i ].Delete ( true ); } #endif } else { PlayerPrefs.DeleteAll (); } #else PlayerPrefs.DeleteAll (); #endif } /// <summary> /// Checks if the IO is supported on current platform or not. /// </summary> /// <returns><c>true</c>, if supported was IOed, <c>false</c> otherwise.</returns> public static bool IOSupported () { return Application.platform != RuntimePlatform.WebGLPlayer && Application.platform != RuntimePlatform.WSAPlayerARM && Application.platform != RuntimePlatform.WSAPlayerX64 && Application.platform != RuntimePlatform.WSAPlayerX86 && Application.platform != RuntimePlatform.SamsungTVPlayer && Application.platform != RuntimePlatform.tvOS && Application.platform != RuntimePlatform.PS4; } /// <summary> /// Determines if the string is file path. /// </summary> /// <returns><c>true</c> if is file path the specified str; otherwise, <c>false</c>.</returns> /// <param name="str">String.</param> public static bool IsFilePath ( string str ) { bool result = false; #if !UNITY_SAMSUNGTV && !UNITY_TVOS && !UNITY_WEBGL if ( Path.IsPathRooted ( str ) ) { try { Path.GetFullPath ( str ); result = true; } catch ( System.Exception ) { result = false; } } #endif return result; } } }