using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Commander
{
public partial class frmCommander : Form
{
private ListView AktywneOkno = null;
private string AktywnaSciezka;
private ListView NieAktywneOkno =
null;
private string NieAktywnaSciezka;
private string sciezka1 = "C:\\";
private string sciezka2 = "C:\\";
public frmCommander()
{
InitializeComponent();
}
private void
wyswietl(ListView gdzie, string katalog)
{
gdzie.Items.Clear();
string[]
nazwy;
ListViewItem
buf;
FileInfo
plik;
DirectoryInfo
dir;
if
(!Dysk1.Items.Contains(katalog))
gdzie.Items.Add(new ListViewItem("..."));
int i;
nazwy =
Directory.GetDirectories(katalog);
for (i = 0; i
< nazwy.Length; i++)
{
dir = new DirectoryInfo(nazwy[i]);
buf = new ListViewItem(new string[] { dir.Name, "<DIR>" });
gdzie.Items.Add(buf);
}
string
nazwapliku;
int
gdziekropka;
nazwy =
Directory.GetFiles(katalog);
for (i = 0; i
< nazwy.Length; i++)
{
plik = new FileInfo(nazwy[i]);
nazwapliku = plik.Name;
gdziekropka = plik.Name.LastIndexOf('.');
if (gdziekropka > 0)
nazwapliku = nazwapliku.Substring(0, plik.Name.LastIndexOf('.'));
buf = new ListViewItem(new string[] { nazwapliku, plik.Extension.Replace(".",
""),
plik.Length.ToString() });
gdzie.Items.Add(buf);
}
}
private void
KopiujKatalog(string zrodlo, string cel)
{
string[]
nazwy;
if (!Directory.Exists(cel))
Directory.CreateDirectory(cel);
nazwy =
Directory.GetFileSystemEntries(zrodlo);
foreach (string
nazwa in nazwy)
{
if (Directory.Exists(nazwa))
{
KopiujKatalog(nazwa, cel + Path.GetFileName(nazwa) + "\\");
}
else
{
File.Copy(nazwa, cel + Path.GetFileName(nazwa), true);
}
}
}
private void
Form1_Resize(object sender, EventArgs e)
{
if (this.WindowState
== FormWindowState.Normal || this.WindowState == FormWindowState.Maximized)
{
int szAll = this.Size.Width - 33;
int sz = szAll / 2;
lvOkno1.Width = sz;
lvOkno2.Width = sz;
lvOkno2.Location = new Point(lvOkno1.Location.X + sz + 3, lvOkno1.Location.Y);
}
}
private void
Form1_Load(object sender, EventArgs e)
{
string[]
nazwy;
nazwy =
Directory.GetLogicalDrives();
foreach (string
dysk in nazwy)
{
Dysk1.Items.Add(dysk);
Dysk2.Items.Add(dysk);
}
Dysk1.SelectedIndex = Dysk1.Items.IndexOf("C:\\");
Dysk2.SelectedIndex = Dysk2.Items.IndexOf("C:\\");
}
private void Dysk1_SelectedIndexChanged(object sender, EventArgs e)
{
sciezka1 =
Dysk1.Text;
try
{
wyswietl(lvOkno1, sciezka1);
}
catch
{
MessageBox.Show("Błąd przy próbie dostępu do napędu", "Błąd",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
Dysk1.SelectedIndex = Dysk1.Items.IndexOf("C:\\");
}
}
private void
Dysk2_SelectedIndexChanged(object sender, EventArgs e)
{
sciezka2 =
Dysk2.Text;
try
{
wyswietl(lvOkno2, sciezka2);
}
catch
{
MessageBox.Show("Błąd przy próbie dostępu do napędu", "Błąd",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
Dysk2.SelectedIndex = Dysk2.Items.IndexOf("C:\\");
}
}
private void
lvOkno1_Enter(object sender, EventArgs e)
{
AktywneOkno =
lvOkno1;
AktywnaSciezka = sciezka1;
NieAktywneOkno = lvOkno2;
NieAktywnaSciezka = sciezka2;
}
private void lvOkno2_Enter(object
sender, EventArgs e)
{
AktywneOkno =
lvOkno2;
AktywnaSciezka = sciezka2;
NieAktywneOkno = lvOkno1;
NieAktywnaSciezka = sciezka1;
}
private void lvOkno_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (e.Button
== MouseButtons.Left)
{
if (AktywneOkno.SelectedItems[0].Text == "...")
{
AktywnaSciezka = AktywnaSciezka.TrimEnd(new char[] { '\\' }); // usuniecie
ostatniego znaku '\'
int last; // indeks ostatniego znaku '\'
last = AktywnaSciezka.LastIndexOf('\\');
AktywnaSciezka = AktywnaSciezka.Substring(0, last + 1);
wyswietl(AktywneOkno, AktywnaSciezka);
}
else if (AktywneOkno.SelectedItems[0].SubItems[1].Text == "<DIR>")
{
AktywnaSciezka += (AktywneOkno.SelectedItems[0].Text + "\\");
wyswietl(AktywneOkno, AktywnaSciezka);
}
else
{
string nazwa = AktywnaSciezka +
AktywneOkno.SelectedItems[0].Text +
"." + AktywneOkno.SelectedItems[0].SubItems[1].Text;
try
{
System.Diagnostics.Process.Start(nazwa);
}
catch
{
MessageBox.Show("Nie można otworzyć pliku", "Błąd",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return;
}
if (AktywneOkno == lvOkno1)
sciezka1 = AktywnaSciezka;
else sciezka2 = AktywnaSciezka;
}
}
private
void lvOkno_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode
== Keys.Enter)
{
if (AktywneOkno.SelectedItems[0].Text == "...")
{
AktywnaSciezka = AktywnaSciezka.TrimEnd(new char[] { '\\' }); // usuniecie
ostatniego znaku '\'
int last; // indeks ostatniego znaku '\'
last = AktywnaSciezka.LastIndexOf('\\');
AktywnaSciezka = AktywnaSciezka.Substring(0, last + 1);
wyswietl(AktywneOkno, AktywnaSciezka);
}
else if (AktywneOkno.SelectedItems[0].SubItems[1].Text == "<DIR>")
{
AktywnaSciezka += (AktywneOkno.SelectedItems[0].Text + "\\");
wyswietl(AktywneOkno, AktywnaSciezka);
}
else
{
string nazwa = AktywnaSciezka +
AktywneOkno.SelectedItems[0].Text +
"." + AktywneOkno.SelectedItems[0].SubItems[1].Text;
try
{
System.Diagnostics.Process.Start(nazwa);
}
catch
{
MessageBox.Show("Nie można otworzyć pliku", "Błąd",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return;
}
if (AktywneOkno == lvOkno1)
sciezka1 = AktywnaSciezka;
else sciezka2 = AktywnaSciezka;
}
}
private void
cmdOtworz_Click(object sender, EventArgs e)
{
if (AktywneOkno
== null) return;
if (AktywneOkno.SelectedItems.Count
!= 1) return;
lvOkno_MouseDoubleClick(null, null);
}
private void
cmdKopiuj_Click(object sender, EventArgs e)
{
if (AktywneOkno
== null) return;
for (int i =
0; i < AktywneOkno.SelectedItems.Count; i++)
{
if (AktywneOkno.SelectedItems[i].Text == "...")
return;
string zrodlo, cel;
if (AktywneOkno.SelectedItems[i].SubItems[1].Text == "<DIR>")
{
zrodlo = AktywnaSciezka + AktywneOkno.SelectedItems[i].Text + "\\";
cel = NieAktywnaSciezka + AktywneOkno.SelectedItems[i].Text + "\\";
KopiujKatalog(zrodlo, cel);
}
else
{
zrodlo = AktywnaSciezka + AktywneOkno.SelectedItems[i].Text +
"." + AktywneOkno.SelectedItems[i].SubItems[1].Text;
cel = NieAktywnaSciezka + AktywneOkno.SelectedItems[i].Text +
"." + AktywneOkno.SelectedItems[i].SubItems[1].Text;
File.Copy(zrodlo, cel, true);
}
}
wyswietl(NieAktywneOkno, NieAktywnaSciezka);
}
private
void cmdPrzenies_Click(object sender, EventArgs e)
{
if (AktywneOkno
== null) return;
for (int i =
0; i < AktywneOkno.SelectedItems.Count; i++)
{
if (AktywneOkno.SelectedItems[i].Text == "...")
return;
string zrodlo, cel;
if (AktywneOkno.SelectedItems[i].SubItems[1].Text == "<DIR>")
{
zrodlo = AktywnaSciezka + AktywneOkno.SelectedItems[i].Text + "\\";
cel = NieAktywnaSciezka + AktywneOkno.SelectedItems[i].Text + "\\";
KopiujKatalog(zrodlo, cel);
Directory.Delete(zrodlo, true);
}
else
{
zrodlo = AktywnaSciezka + AktywneOkno.SelectedItems[i].Text +
"." + AktywneOkno.SelectedItems[i].SubItems[1].Text;
cel = NieAktywnaSciezka + AktywneOkno.SelectedItems[i].Text +
"." + AktywneOkno.SelectedItems[i].SubItems[1].Text;
File.Copy(zrodlo, cel, true);
File.Delete(zrodlo);
}
}
wyswietl(lvOkno1, sciezka1);
wyswietl(lvOkno2, sciezka2);
}
private void
cmdUsun_Click(object sender, EventArgs e)
{
if (AktywneOkno
== null) return;
if
(AktywneOkno.SelectedItems[0].Text == "...")
return;
DialogResult
odp = MessageBox.Show("Czy na pewno?", "Usuń",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (odp !=
DialogResult.Yes) return;
string co;
for (int i =
0; i < AktywneOkno.SelectedItems.Count; i++)
{
if (AktywneOkno.SelectedItems[i].SubItems[1].Text == "<DIR>")
{
co = AktywnaSciezka + AktywneOkno.SelectedItems[i].Text;
Directory.Delete(co, true);
}
else
{
co = AktywnaSciezka + AktywneOkno.SelectedItems[i].Text +
"." + AktywneOkno.SelectedItems[i].SubItems[1].Text;
File.Delete(co);
}
}
wyswietl(AktywneOkno, AktywnaSciezka);
}
private void
Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.F5:
cmdOtworz_Click(null, null);
break;
case Keys.F6:
cmdKopiuj_Click(null, null);
break;
case Keys.F7:
cmdPrzenies_Click(null, null);
break;
case Keys.F8:
cmdUsun_Click(null, null);
break;
}
}
}
}