- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
private void FormBackUpFlash_Load(object sender, EventArgs e)
{
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)
{
if (d.DriveType == DriveType.Removable)
{
bool thisIsDisketa = false;
if (d.Name.Contains("A:")) thisIsDisketa = true;
if (d.Name.Contains("B:")) thisIsDisketa = true;
if (thisIsDisketa)
continue;
else
listBoxDevice.Items.Add(d);
}
}
if (listBoxDevice.Items.Count > 0)
{
StatusLabel.ForeColor = Color.Blue;
StatusLabel.Text = "Готово!";
listBoxDevice.SelectedIndex = 0;
}
else
{
buttonWrite.Enabled = false;
StatusLabel.ForeColor = Color.Red;
StatusLabel.Text = "Подходящих устройств нет!";
}
}
private void buttonWrite_Click(object sender, EventArgs e)
{
try
{
DriveInfo drv = (DriveInfo)listBoxDevice.SelectedItem;
pathDst = Path.Combine(drv.Name, "PROJECTNAME_Backup");
if (!Directory.Exists(Path.Combine(drv.Name, "PROJECTNAME_Backup")))
{
Directory.CreateDirectory(pathDst);
}
this.Cursor = Cursors.WaitCursor;
DBMSSQL dbm = new DBMSSQL();
int i;
for (i = 0; i < 10; i++)
{
if (dbm.BackupDB(Path.Combine(Path.Combine(drv.Name, "PROJECTNAME_Backup"), "DataPROJECTNAMEDataContext.bak"), true))
{
MessageBox.Show("Резервная копия создана успешно!", "OK!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
break;
}
Thread.Sleep(1000);
}
if (i == 10)
{
MessageBox.Show("Ошибка при создании резервной копии!!!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception e1)
{
MessageBox.Show(e1.Message + "\r\nЭкспорт отменен!");
this.DialogResult = DialogResult.Cancel;
}
finally { this.Cursor = Cursors.Default; }
}
private void listBoxDevice_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
DriveInfo drv = (DriveInfo)listBoxDevice.SelectedItem;
labelSizeDevice.Text = drv.AvailableFreeSpace < 1000000000 ?
string.Format("{0}MB", drv.AvailableFreeSpace / 1000000) :
string.Format("{0:F2}GB", (float)drv.AvailableFreeSpace / 1000000000.0);
}
catch (Exception e1)
{
MessageBox.Show(e1.Message);
}
}
Три в одном.
Исключаем флоппи из списка дисков, 10 раз пытаемся создать бэкап и 1000000 байт в мегабайте.
WGH 15.10.2013 23:47 # +1
Но ведь по СИ правильно!
pingw33n 15.10.2013 23:54 # 0
Правильно. И 2^20 в MiB.
Qwertiy 16.10.2013 01:08 # 0
И флаг для дискет. А способ определения дискет :D
А Exception - это отмена!
krypt 16.10.2013 12:37 # 0
Возможно, где-то в недрах WinAPI оно и есть, но в C# не забиндено.
WGH 16.10.2013 20:29 # 0
http://stackoverflow.com/a/4520267/371970
krypt 16.10.2013 23:02 # 0
Я в 2009м вопросом интересовался )
Qwertiy 16.10.2013 21:51 # 0
bormand 16.10.2013 22:15 # +1
bormand 16.10.2013 22:26 # 0
Но нахрен юзеру сдался этот объем? :) Он что, должен сравнить его на глаз с предполагаемым размером бекапа (который скорее всего нигде и не показан)? Да нихуя! Юзер и так заранее знает, куда он хочет положить бекап. Это или флешка, которую он только что воткнул, или папка backups где-то на диске. И в 99% случаев он не будет указывать другой диск, а тупо пойдет и удалит с флешки порнуху ненужные файлы. Поэтому, имхо, достаточно сообщения в духе "На диске X недостаточно свободного места. Пожалуйста, освободите еще 500MiB на диске X: или укажите другой путь."
krypt 16.10.2013 23:04 # 0
bormand 16.10.2013 23:11 # 0
Кстати, еще насчет неудобств окна выбора диска. Вот воткнуто у юзера две флешки F и G. Он не помнит какая из них какая. Ему придется сходить в "мой компьютер", и поглядеть что там где. А с обычным выбором директории он тупо узнает флешку по знакомым папкам на ней...
Поэтому, процитирую себя: "а еще лучше не ебать мозг себе и юзерам, а показать стандартный и привычный диалог выбора директории..."
krypt 17.10.2013 08:00 # 0
Не факт, что мы заранее знаем точный размер, или вообще какой бы то ни было
bormand 17.10.2013 08:27 # 0
krypt 17.10.2013 10:01 # 0
bormand 17.10.2013 12:56 # +1
Stertor 16.10.2013 22:28 # −2
GetVolumeInformation/DeviceIOControl/GetDriveType
Lokich 16.10.2013 12:12 # 0
WGH 16.10.2013 12:16 # 0
Stertor 16.10.2013 22:19 # −1
DeviceIOcontrol/GetDriveType для петушков, что Вы...
>> thisIsDisketa
этоЛСДискета
someone 17.10.2013 14:25 # +6
guest 18.10.2013 13:31 # 0
{
TodoInNextVersion();//клянусь
}