я делаю приложение для передачи файлов (сервер-клиент) ..
у меня есть два listviewS для исследования Локального ПК и Удаленного ПК .. перед отправкой / получением элементов ..
мне нужно проверить, есть ли другойфайл или папка имеют одно и то же имя в пути назначения ... когда я нажимаю на кнопку [отправить или получить] элемент, добавленный в список ... затем, когда я нажимаю на кнопку [Начать передачу] .., он запускается.
, поэтому метод AddItems вызывается, когда я нажимаю кнопку Получить или отправить .. Я получаю SelectedItems из исходного ListView .. и Элементы целевого ListView... затем я проверяю каждый элемент в SelectedItems , если он существует в Items
, который я пытался использовать
items.Contain(item)
но это не сработало, но всегда выдавало мне false, даже если элемент уже существует.
, поэтому я использовал items.ContainKey, и это сработало ... но в случае, если у меня есть файл с именем "Temp "без расширения и папка в пути назначения также называется" Temp ".. он вернет True .. и это моя проблема ..
bool YesToAll = false;
public void AddItems(ListView.SelectedListViewItemCollection selectedItems, ListView.ListViewItemCollection items,TransferType type,string destPath)
{
foreach(ListViewItem item in selectedItems)
{
if (items.ContainsKey(item.Name) && !YesToAll)
{
MyMessageBox msgbox = new MyMessageBox("Item is already exists .. Do you want to replace (" + item.Text + ") ?");
msgbox.ShowDialog();
if (msgbox.DialogResult == DialogResult.Yes)
{
Add(item, type, destPath);
}
else if (msgbox.DialogResult == DialogResult.OK)
{
YesToAll = true;
Add(item, type, destPath);
}
else if (msgbox.DialogResult == DialogResult.No)
{
continue;
}
else
{
return;
}
}
else
{
Add(item, type, destPath);
}
}
YesToAll = false;
}
private void Add(ListViewItem item,TransferType type,string path)
{
ListViewItem newItem = (ListViewItem)item.Clone();
newItem.ImageIndex = imageList1.Images.Add(item.ImageList.Images[item.ImageIndex],Color.Transparent);
newItem.SubItems.Add(type.ToString());
newItem.SubItems.Add(path);
newItem.Tag = type;
listView1.Items.Add(newItem);
}
YesToAll устанавливается в значение true, когда пользователь нажимает кнопку [Да для всех] в диалоговом окне подтверждения.
TransferTypeпросто пометить элемент, если он собирается использовать SendMethod или ReceiveMethod
public enum TransferType
{
Send , Receive
};
, так как я могу это исправить ... если я использую пользовательский метод вместо [Contains], который проверяет имя и длявведите (файл или папка), поскольку каждый элемент уже имеет подэлемент, который заранее сообщает, является ли он папкой или файлом
.