private bool UpdateInfo(stSaveInfo info)
    {
        int i = _saves.IndexOf(info);
        if (i == -1) return false;

        _saves[i].fileInfo.ElapsedTime = ElapsedTime;
        _saves[i].fileInfo.DateAndTime = DateAndTime;
        _saves[i].fileInfo.SaveCount   = SaveCount;
        _saves[i].fileInfo.Scene       = Scene;

        return true;
    }
    /// <summary>
    /// Iterate through files from given "path" and fill "_saves" field with informations from files.
    /// Retrived inofrmation used for self explaning save file.
    /// This function will call when the application start.
    /// </summary>
    /// <returns>
    /// The saves.
    /// </returns>
    /// <param name='addresses'>
    /// If set to <c>true</c> addresses.
    /// </param>
    private List<stSaveInfo> RetriveSaves(string[] addresses)
    {
        stSaveInfo tmpSaveInfo;
        List<stSaveInfo> tmpSaves = new List<stSaveInfo>();

        if (SaveDirExist() == false){
            CDebug.LogError("Save directory not exist.");
            return null ;
        }

        for (int i = 0; i < addresses.Length ; i++){
            tmpSaveInfo = new stSaveInfo();
            bool res = Load(addresses[i], (ISaveAndLoadAgent)CSaveFileInfo_SALAgent.Instance);
            if (res == false)
                continue;
            tmpSaveInfo.fileInfo.DateAndTime = CSaveFileInfo_SALContainer.Instance_Load.SaveFileInfo.DateAndTime;
            tmpSaveInfo.fileInfo.ElapsedTime = CSaveFileInfo_SALContainer.Instance_Load.SaveFileInfo.ElapsedTime;
            tmpSaveInfo.fileInfo.Index       = CSaveFileInfo_SALContainer.Instance_Load.SaveFileInfo.Index;
            tmpSaveInfo.fileInfo.SaveCount   = CSaveFileInfo_SALContainer.Instance_Load.SaveFileInfo.SaveCount;
            tmpSaveInfo.fileInfo.Scene       = CSaveFileInfo_SALContainer.Instance_Load.SaveFileInfo.Scene;
            tmpSaveInfo.filePath             = addresses[i];
            tmpSaves.Add(tmpSaveInfo);
        }
        tmpSaves.Sort(delegate(stSaveInfo s1,stSaveInfo s2){return s1.fileInfo.Index.CompareTo(s2.fileInfo.Index);});
        return tmpSaves;
    }
    IEnumerator Start()
    {
        _existingSaveAddress = GetFilesAddress();
        _saves = RetriveSaves(_existingSaveAddress);
        if(_saves.Count <= 0){
            CDebug.LogError("No Save File Founde.");
            yield break;
        }
        _currentSave = _saves[0];//just for now.

        //         CSaveFileInfo_SALContainer c = CSaveFileInfo_SALContainer.Instance;
        //         c.SaveFileInfo.Index = 4;
        //        print(c.SaveFileInfo.Index);
        //		stSaveInfo saveInfo = new stSaveInfo();
        //		saveInfo.filePath = GeneratePath(0);
        //		saveInfo.fileInfo.DateAndTime = "2102-03-07 -- 8:01PM";
        //		saveInfo.fileInfo.ElapsedTime = "0:0 Min";
        //		saveInfo.fileInfo.SaveCount = 0;
        //        saveInfo.fileInfo.Index = 2;
        //        saveInfo.fileInfo.Scene = "First Scene";
        //		_saves.Add(saveInfo);
        //
        //	    saveInfo = new stSaveInfo();
        //		saveInfo.filePath = GeneratePath(1);
        //		saveInfo.fileInfo.DateAndTime = "2102-03-07 -- 8:15PM";
        //		saveInfo.fileInfo.ElapsedTime = "0:10 Min";
        //		saveInfo.fileInfo.SaveCount = 1;
        //        saveInfo.fileInfo.Index = 0;
        //        saveInfo.fileInfo.Scene = "Sec Scene";
        //		_saves.Add(saveInfo);
        //
        //	    saveInfo = new stSaveInfo();
        //		saveInfo.filePath = GeneratePath(2);
        //		saveInfo.fileInfo.DateAndTime = "2102-03-07 -- 8:30PM";
        //		saveInfo.fileInfo.ElapsedTime = "0:25 Min";
        //		saveInfo.fileInfo.SaveCount = 2;
        //        saveInfo.fileInfo.Index = 1;
        //        saveInfo.fileInfo.Scene = "Third Scene";
        //		_saves.Add(saveInfo);

        yield return new WaitForSeconds(1.0f);;//wait unitl other Start() functions done.

        Load (CurrentSave);
    }
    void Awake()
    {
        DontDestroyOnLoad(this);

        _instances.Add(this);// Part of singleton system.
        CSingleton.DestroyExtraInstances(_instances); // Part of singleton system.

        _invalideFileNameChars = Path.GetInvalidFileNameChars();
        _invalidePathChars     = Path.GetInvalidPathChars();
        _currentDirectory      = Directory.GetCurrentDirectory();
        SaveName               = "save";
        SaveFolderName         = "TmpSave";
        SaveDirectoy           = _currentDirectory;
        SavePath               = SaveDirectoy + _dirSeperator + SaveFolderName;
        _saves                 = new List<stSaveInfo>();//Contain all saves.
        _agents                = new List<ISaveAndLoadAgent>();//list of all save and load agents.
        _currentSave           = new stSaveInfo();
    }
    public bool Save(stSaveInfo saveInfo)
    {
        int index = GetSaveIndex(saveInfo);
        _currentSave = saveInfo;// must changed
        SaveCount += 1;
        _fileStream = File.Open(_saves[index].filePath,FileMode.Create);
        UpdateInfo(saveInfo);

        for (int i = 0; i < _agents.Count; i++ ){
            for(int j = 0; j < _agents[i].ClientsInstances.Count; j++){//Notify all clients about save.
                 _agents[i].ClientsInstances[j].OnSave();
            }
            _agents[i].SaveToFile(ref _fileStream,_defualtFormatter);
        }

        _fileStream.Close();
        return true;
    }
    public bool Load(stSaveInfo loadInfo)
    {
        int index = GetSaveIndex(loadInfo);
        _fileStream = File.Open(_saves[index].filePath,FileMode.Open);
        for (int i = 0; i < _agents.Count; i++ )
        {
            _agents[i].LoadFromFile(ref _fileStream,_defualtFormatter);
            for(int j = 0; j < _agents[i].ClientsInstances.Count; j++)//Notify all clients about load.
            {
                _agents[i].ClientsInstances[j].OnLoad();
            }
        }
        _fileStream.Close();

         return true;
    }
 public int GetSaveIndex(stSaveInfo si)
 {
     return _saves.IndexOf(si);
 }
 public stSaveInfo AddNewSave()
 {
     stSaveInfo newSave = new stSaveInfo();
     //newSave.filePath = _defualtFilePath + _defualtFileName +  _currentSaveInfo.info.saveCounts.ToString("D3");
     _saves.Add(newSave);
     return newSave;
 }