Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Visual Basic: Общие вопросы > Обработка файлов в директории |
Автор: Димон Безпарольный 02.07.18, 16:55 |
Написал нехитрый код перебора всех файлов в директории: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Do While Len(tmp) > 0 tmp = Dir() TMP1 = "D:\8051\SAM7s\LCD_ILI9341_28_Font2\Fonts_ENG\01_Обычный\" + tmp 'TMP1 = "D:\8051\SAM7s\LCD_ILI9341_28_Font2\Fonts_ENG\01_Обычный\Fonts_@Microsoft_YaHei.h" Okno1.Text = Okno1.Text & TMP1 & vbCrLf Okno1.Text = Okno1.Text & "D:\8051\SAM7s\LCD_ILI9341_28_Font2\Fonts_ENG\01_Обычный\Fonts_@Microsoft_YaHei.h" & vbCrLf Open TMP1 For Input As #1 Close CNT = CNT + 1 Loop Перебор файлов работает. Файлы в окне отображаются. Но при попытке открыть файл с заданием пути: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> TMP1 = "D:\8051\SAM7s\LCD_ILI9341_28_Font2\Fonts_ENG\01_Обычный\" + tmp Приводит к остановке выполнения с кодом "путь не найден". Если задавать непосредственно: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> TMP1 = "D:\8051\SAM7s\LCD_ILI9341_28_Font2\Fonts_ENG\01_Обычный\Fonts_@Microsoft_YaHei.h" То открытие происходит нормально. Хотя оба пути выдают в окне одинаковый результат: Цитата D:\8051\SAM7s\LCD_ILI9341_28_Font2\Fonts_ENG\01_Обычный\Fonts_@Microsoft_YaHei.h D:\8051\SAM7s\LCD_ILI9341_28_Font2\Fonts_ENG\01_Обычный\Fonts_@Microsoft_YaHei.h Код вывода в окно: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Okno1.Text = Okno1.Text & TMP1 & vbCrLf Okno1.Text = Okno1.Text & "D:\8051\SAM7s\LCD_ILI9341_28_Font2\Fonts_ENG\01_Обычный\Fonts_@Microsoft_YaHei.h" & vbCrLf Помогите понять - где ж грабли, а то я закипел. Спасибо. |
Автор: Akina 02.07.18, 17:03 |
Окну доверия - ноль. Получи их в двух переменных и сравнивай по одному символу. Ну и длину сравни. |
Автор: Димон Безпарольный 03.07.18, 05:42 |
Вопрос решился. Добавил в цикл: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> If Len(tmp) = 0 Then Exit Do Хотя в цикле прописано условие: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Do While Len(tmp) > 0 Но каким - то образом в tmp = Dir() все таки попадает строка нулевой длины. |
Автор: Akina 03.07.18, 06:32 |
Потому что после присвоения строки нулевой длины отработает весь цикл, и только потом выполнится проверка. Правильный код должен быть, например, таким: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> tmp = Dir("*.h") ' Первое присвоение Do While Len(tmp) > 0 ' Проверка непосредственно после присвоения TMP1 = "D:\8051\SAM7s\LCD_ILI9341_28_Font2\Fonts_ENG\01_Обычный\" + tmp 'TMP1 = "D:\8051\SAM7s\LCD_ILI9341_28_Font2\Fonts_ENG\01_Обычный\Fonts_@Microsoft_YaHei.h" Okno1.Text = Okno1.Text & TMP1 & vbCrLf Okno1.Text = Okno1.Text & "D:\8051\SAM7s\LCD_ILI9341_28_Font2\Fonts_ENG\01_Обычный\Fonts_@Microsoft_YaHei.h" & vbCrLf Open TMP1 For Input As #1 Close CNT = CNT + 1 tmp = Dir() ' Следующее присвоение Loop Добавлено Хотя имхо разумнее выполнять перебор через FSO в цикле ForEach. |