Hawk2811 Ответов: 2

(Помогите!) ! ! ! ! система не может найти указанный файл


Моя программа Когда я нажимаю на элемент Listview она зависает и выдает ошибку O система не может найти указанный файл

VB.net

Что я уже пробовал:

Я разрабатываю симулятор операционной системы и окно приложения когда я нажимаю на приложение оно выдает ошибку которая не нашла файл приложения пожалуйста помогите мне

[РЕДАКТИРОВАТЬ]ниже фрагмент кода был добавлен из комментария[/РЕДАКТИРОВАТЬ]

Вот та часть кода, где находится ошибка
Private Sub Apps_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For Each files As String In Directory.GetFiles(".\apps\")
ListView1.Items.Add(Path.GetFileName(files))
Next

End Sub

Private Sub ListView1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.DoubleClick
For Each file As ListViewItem In ListView1.Items
Dim filePath As String = file.SubItems(0).Text + "\" + file.Text
If file.Selected = True Then
Process.Start(filePath)
End If
Next
End Sub

Dave Kreskowiak

На это вообще невозможно ответить. Мы понятия не имеем, что делает код в то время, когда вы нажимаете на ListView. Сам ListView не выдаст эту ошибку, поэтому это должно быть что-то в вашем суперсекретном коде, которым вы не поделились с нами.

Hawk2811

Вот та часть кода, где находится ошибка

Private Sub Apps_Load(ByVal sender As System.Объект, бывал е как система.EventArgs) Обрабатывает MyBase.Load
Для каждого файла в виде строки в каталоге.GetFiles(".\apps\")
Мыши listview1.Предметы.Добавить(Path.GetFileName(files))
Следующий

Конец Подводной Лодки

Private Sub ListView1_DoubleClick(ByVal sender As System.Объект, бывал е как система.EventArgs) Обрабатывает ListView1.DoubleClick
Для каждого файла как ListViewItem в ListView1.Предметы
Dim filePath As String = file.Подпункты(0).Текст + "\" + файл.Текст
Если файл.Selected = True Тогда
Процесс.Start(путь к файлу)
Конец, Если
Следующий
Конец Подводной Лодки

Dave Kreskowiak

Во-первых, в Apps_Load ваш код делает предположения о том, что такое "текущий каталог". Всегда создавайте полные пути из хорошо известной папки, Окружающая среда.Метод GetFolderPath (System) | Microsoft Docs[^], или из папки, из которой запущено ваше приложение, Как Получить Путь Запуска Приложения Из Консольного Приложения С Помощью C#[^].

Это также верно для ListView1_DoubleClick. Опять же, ваш код предполагает, что такое "текущий каталог". Никогда так не делай. Текущий каталог может быть изменен без вашего ведома, например, если вы показываете OpenFileDialog, и пользователь начинает просматривать папки в поисках файла.

Hawk2811

это и в C # или vb

Dave Kreskowiak

Я понятия не имею, что ты только что сказал.

Если вы просите меня написать ваш код для вас, этого не произойдет. Никто не пишет мой код для меня, и у меня есть много работы, чтобы сделать, в то время как я пишу ваш.

Hawk2811

Нет конечно нет

Hawk2811

Думаю мне придется поискать код в интернете

Dave Kreskowiak

Ты его не найдешь. Самый быстрый способ сделать это-прочитать документацию, посмотреть примеры и написать код самостоятельно.

Hawk2811

Я Использовал Visual Basic 2010 Express Для Этого Кода

Hawk2811

и извините что не поделился кодом

Hawk2811

Мой проект будет перезапущен почему я нашел еще одну ошибку

2 Ответов

Рейтинг:
2

phil.o

For Each file As ListViewItem In ListView1.Items
Dim filePath As String = file.SubItems(0).Text + "\" + file.Text
Вы берете каждое имя файла и добавляете к нему разделитель пути плюс имя файла снова. Это приводит к несуществующему файлу.
Поставьте точку останова на For Each в строке, нажмите клавишу F5 и запустите сеанс отладки. Внимательно следите за ценностью filePath переменная, и вы поймете проблему.


Рейтинг:
2

OriginalGriff

Мы не можем сказать вам: "сделайте это, и это сработает" - мы понятия не имеем, что находится в вашем Listview, и нет доступа к вашей файловой системе! И вам нужно и то, и другое, чтобы понять, что происходит.

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Если вы не знаете, как его использовать, то быстрый Google для "Visual Studio debugger" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему. Обратите пристальное внимание на содержимое списка и на путь, который вы создаете. Затем сравните этот точный путь с вашей реальной файловой системой и посмотрите, где находится ваш файл.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!