- Регистрация
- 06.11.2018
- Сообщения
- 11 790
- Благодарностей
- 5 720
- Баллы
- 113
В шаблоне нагуливания профилей у меня возникло нестабильное место , а именно проблема сохранения профиля после нагуливания.
После прогона 300 шт. профилей по второму кругу около 100 шт. были меньшего размера, а некоторые оказались вообще пустые, только данные профиля. пару штук отказались загружаться на третий круг.
Сохранял кубиком в зенке. Ну пошерстил статьи конкурсные, взял код оттуда с контролем размера нового профиля на C#. результат тот же. ошибки сохранения , потери файлов.
Думал, думал.... решил пойти немного другим путем. Вместо контроля размера файла профиля , я решил контролировать все файлы из которого состоит профиль.
Если какой файл теряется при записи или становиться меньше размером , то он берется из старого профиля. Вот тут есть нюанс . например куки и супер куки нормально выросли, а хранилище слетело в ноль.
У нас хранилище восстановиться из старого профиля, а куки и супер куки будут свежими..... вот незнаю правильно это или нет ? теоретически при следующей прогонке профиля все должно разом обновиться....
кто что думает ?
ну и сам код. покритикуйте , посоветуйте что можно улучшить ?
После прогона 300 шт. профилей по второму кругу около 100 шт. были меньшего размера, а некоторые оказались вообще пустые, только данные профиля. пару штук отказались загружаться на третий круг.
Сохранял кубиком в зенке. Ну пошерстил статьи конкурсные, взял код оттуда с контролем размера нового профиля на C#. результат тот же. ошибки сохранения , потери файлов.
Думал, думал.... решил пойти немного другим путем. Вместо контроля размера файла профиля , я решил контролировать все файлы из которого состоит профиль.
Если какой файл теряется при записи или становиться меньше размером , то он берется из старого профиля. Вот тут есть нюанс . например куки и супер куки нормально выросли, а хранилище слетело в ноль.
У нас хранилище восстановиться из старого профиля, а куки и супер куки будут свежими..... вот незнаю правильно это или нет ? теоретически при следующей прогонке профиля все должно разом обновиться....
кто что думает ?
ну и сам код. покритикуйте , посоветуйте что можно улучшить ?
C#:
string profilePath = @"C:\1\test_1.zpprofile" ; // задаем имя сохраняемого файла
// Переменные проекта, которые нужно сохранить
var saveVars = new[] { "var1", "var2" };
if (File.Exists(profilePath)) {
string profilePathAlt = profilePath.Replace(".zpprofile", "_ForCheck.zpprofile"); // формируем путь к копии профиля
project.Profile.Save(profilePathAlt, true, true, true, true, true, true, true, true, true, saveVars); // сохраняем копию профиля
/////////// разархивируем оба профиля ///////////
string Dir_Dest = profilePath +"_DIR" ; // формируем путь директории для разархивирования для старого профиля
string Dir_Altr = profilePathAlt +"_DIR" ; // формируем путь директории для разархивирования для нового профиля
if (Directory.Exists(Dir_Dest)) { Directory.Delete(Dir_Dest, true); } // удаляем директории если вдруг они существуют
if (Directory.Exists(Dir_Altr)) { Directory.Delete(Dir_Altr, true); }
ZipFile.ExtractToDirectory(profilePath, Dir_Dest); // Извлекаем содержимое архива старого профиля
ZipFile.ExtractToDirectory(profilePathAlt, Dir_Altr); // Извлекаем содержимое архива старого профиля
//--------------------------------------------//
///////// проверяем наличие файлов , отсутсвующие файлы берем из старого профиля, если они там есть //////////
string browserprofiledata_file_Dest = Dir_Dest+@"\browserprofiledata.zpdata" ;
string browserprofiledata_file_Altr = Dir_Altr+@"\browserprofiledata.zpdata" ;
string profileaudio_file_Dest = Dir_Dest+@"\profileaudio.zpaudio" ;
string profileaudio_file_Altr = Dir_Altr+@"\profileaudio.zpaudio" ;
string profilecanvas_file_Dest = Dir_Dest+@"\profilecanvas.zpcanvas" ;
string profilecanvas_file_Altr = Dir_Altr+@"\profilecanvas.zpcanvas" ;
string profiledata_file_Dest = Dir_Dest+@"\profiledata.zpdata" ;
string profiledata_file_Altr = Dir_Altr+@"\profiledata.zpdata" ;
string profileextra_file_Dest = Dir_Dest+@"\profileextra.zpextra" ;
string profileextra_file_Altr = Dir_Altr+@"\profileextra.zpextra" ;
string profileplugins_file_Dest = Dir_Dest+@"\profileplugins.zpplugin" ;
string profileplugins_file_Altr = Dir_Altr+@"\profileplugins.zpplugin" ;
string profileproxy_file_Dest = Dir_Dest+@"\profileproxy.zpproxy" ;
string profileproxy_file_Altr = Dir_Altr+@"\profileproxy.zpproxy" ;
string variables_file_Dest = Dir_Dest+@"\variables.zpdata" ;
string variables_file_Altr = Dir_Altr+@"\variables.zpdata" ;
string profilecookie_file_Dest = Dir_Dest+@"\profilecookie.zpcookie" ;
string profilecookie_file_Altr = Dir_Altr+@"\profilecookie.zpcookie" ;
string profilestorage_file_Dest = Dir_Dest+@"\profilestorage.zpstorage" ;
string profilestorage_file_Altr = Dir_Altr+@"\profilestorage.zpstorage" ;
string profilesupercookie_file_Dest = Dir_Dest+@"\profilesupercookie.zpcookie" ;
string profilesupercookie_file_Altr = Dir_Altr+@"\profilesupercookie.zpcookie" ;
try { if ( ! File.Exists(browserprofiledata_file_Altr)) { File.Copy(browserprofiledata_file_Dest , browserprofiledata_file_Altr , true ); } } catch {project.SendInfoToLog("не найден файл в старом профиле - " + browserprofiledata_file_Dest,true);}
try { if ( ! File.Exists(profileaudio_file_Altr)) { File.Copy(profileaudio_file_Dest , profileaudio_file_Altr , true ); } } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profileaudio_file_Dest,true);}
try { if ( ! File.Exists(profilecanvas_file_Altr)) { File.Copy(profilecanvas_file_Dest , profilecanvas_file_Altr , true ); } } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profilecanvas_file_Dest,true);}
try { if ( ! File.Exists(profiledata_file_Altr)) { File.Copy(profiledata_file_Dest , profiledata_file_Altr , true ); } } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profiledata_file_Dest,true);}
try { if ( ! File.Exists(profileextra_file_Altr)) { File.Copy(profileextra_file_Dest , profileextra_file_Altr , true ); } } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profileextra_file_Dest,true);}
try { if ( ! File.Exists(profileplugins_file_Altr)) { File.Copy(profileplugins_file_Dest , profileplugins_file_Altr , true ); } } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profileplugins_file_Dest,true);}
try { if ( ! File.Exists(profileproxy_file_Altr)) { File.Copy(profileproxy_file_Dest , profileproxy_file_Altr , true ); } } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profileproxy_file_Dest,true);}
try { if ( ! File.Exists(variables_file_Altr)) { File.Copy(variables_file_Dest , variables_file_Altr , true ); } } catch {project.SendInfoToLog("не найден файл в старом профиле - " + variables_file_Dest,true);}
try { if ( ! File.Exists(profilestorage_file_Altr)) { File.Copy(profilestorage_file_Dest , profilestorage_file_Altr , true ); } } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profilestorage_file_Dest,true);}
try { if ( ! File.Exists(profilesupercookie_file_Altr)) { File.Copy(profilesupercookie_file_Dest , profilesupercookie_file_Altr , true ); } } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profilesupercookie_file_Dest,true);}
try { if ( ! File.Exists(profilecookie_file_Altr)) { File.Copy(profilecookie_file_Dest , profilecookie_file_Altr , true ); } } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profilecookie_file_Dest,true);}
//--------------------------------------------//
///////// проверяем увеличение размера файлов //////////
var infoOld = new FileInfo(profilecookie_file_Dest); // куки
var infoNew = new FileInfo(profilecookie_file_Altr);
if (infoNew.Length < infoOld.Length) { try { File.Copy(profilecookie_file_Dest , profilecookie_file_Altr , true ); } catch{} } // при уменьшении копируем из старого профиля
infoOld = new FileInfo(profilesupercookie_file_Dest); // супер куки
infoNew = new FileInfo(profilesupercookie_file_Altr);
if (infoNew.Length < infoOld.Length) { try { File.Copy(profilesupercookie_file_Dest , profilesupercookie_file_Altr , true ); } catch{} } // при уменьшении копируем из старого профиля
infoOld = new FileInfo(profilestorage_file_Dest); // хранилище
infoNew = new FileInfo(profilestorage_file_Altr);
if (infoNew.Length < infoOld.Length) { try { File.Copy(profilestorage_file_Dest , profilestorage_file_Altr , true ); } catch{} } // при уменьшении копируем из старого профиля
///////// архивируем получившийся профиль в архив //////////
try {
File.Delete(profilePath);
ZipFile.CreateFromDirectory(Dir_Altr, profilePath);
} catch{project.SendInfoToLog("не получилось сделать архив профиля - " + profilePath,true);}
//--------------------------------------------//
///////// чистим все временные файлы и директории //////////
try {
Directory.Delete(Dir_Dest, true);
Directory.Delete(Dir_Altr, true);
File.Delete(profilePathAlt);
} catch{project.SendInfoToLog("ошибка при удалении временных файлов " + profilePathAlt,true);}
//--------------------------------------------//
} else { project.Profile.Save(profilePath, true, true, true, true, true, true, true, true, true, saveVars); }