Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/34: Рейтинг темы: голосов - 34, средняя оценка - 4.62
7 / 7 / 4
Регистрация: 08.07.2010
Сообщений: 116

Разное действие для разных типов файлов, выбранных в OpenFileDialog

25.08.2010, 10:47. Показов 7148. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
имеется два OpenFileDialog которые открывают файлы разных типов, в них немного отличается код:
C#
1
2
3
4
5
6
7
8
9
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
string baseFolder = "C:\\пример";
            string subFolder = string.Empty;
            OpenFileDialog OP = new OpenFileDialog();
                OP.FileName = "";
                OP.Filter = "TXT File (*.txt)|*.txt";
                OP.Title = "Открыть";
                if (OP.ShowDialog() != DialogResult.Cancel)
                {
                    using (StreamReader sr = new StreamReader(OP.FileName))
                    {
                        StreamWriter sw = null;
                        sr.ReadLine();
                        string line;
                        while ((line = sr.ReadLine()) != null)
                        {
                            string text = line.Substring(30, 3).Trim();
                            string folder = line.Substring(0, 11).Trim();
                            bool endOfData = text.LastIndexOf("-1") == text.Length - 2;
 
                            if (endOfData)
                            {
                                if (sw != null)
                                {
                                    sw.Close();
                                    sw = null;
                                }
                            }
                            else
                            {
                                if (sw == null)
                                {
                                    subFolder = Path.Combine(baseFolder, folder);
                                    Directory.CreateDirectory(subFolder);
 
                                    sw = new StreamWriter(File.Create(Path.Combine(subFolder, text)));
                                }
                            }
 
                            if (sw != null)
                            {
                                sw.WriteLine(line.Substring(0, 30));
                            }
                        }
 
                        if (sw != null)
                        {
                            sw.Close();
                            sw = null;
                        }
                    }
                }
C#
1
2
3
4
5
6
7
8
9
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
string baseFolder = "C:\\пример";
            string subFolder = string.Empty;
            OpenFileDialog OP = new OpenFileDialog();
                OP.FileName = "";
                OP.Filter = "DAT File (*.dat)|*.dat";
                OP.Title = "Открыть";
                if (OP.ShowDialog() != DialogResult.Cancel)
                {
                    using (StreamReader sr = new StreamReader(OP.FileName))
                    {
                        StreamWriter sw = null;
                        sr.ReadLine();
                        string line;
                        while ((line = sr.ReadLine()) != null)
                        {
                            string text = line.Substring(25, 3).Trim();
                            string folder = line.Substring(0, 11).Trim();
                            bool endOfData = text.LastIndexOf(" 0") == text.Length - 2;
 
                            if (endOfData)
                            {
                                if (sw != null)
                                {
                                    sw.Close();
                                    sw = null;
                                }
                            }
                            else
                            {
                                if (sw == null)
                                {
                                    subFolder = Path.Combine(baseFolder, folder);
                                    Directory.CreateDirectory(subFolder);
 
                                    sw = new StreamWriter(File.Create(Path.Combine(subFolder, text)));
                                }
                            }
 
                            if (sw != null)
                            {
                                sw.WriteLine(line.Substring(0, 25));
                            }
                        }
 
                        if (sw != null)
                        {
                            sw.Close();
                            sw = null;
                        }
                    }
                }
т.е. они висят на двух кнопках, можно ли сделать это все по нажатии на одну кнопку, если выбрал txt файл, то выполнялось первое действие, а если dat, то второе?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.08.2010, 10:47
Ответы с готовыми решениями:

OpenFileDialog получение всех выбранных файлов
Я хотел сделать следующее: Открывается диалог с выбором файла, я выбираю несколько файлов и хочу все выбранные файлы добавить в ListBox1....

Получить количество выбранных файлов через OpenFileDialog
Здравствуйте. Такой вопрос: Ставлю свойство у OpenFileDialog openFileDialog1.Multiselect = true;, выбираю несколько файлов. Как мне...

OpenFileDialog. Открытие разных файлов
Есть стандартная форма метода, для открытия документов с помощью диалогового окна: private void button2_Click(object sender,...

14
 Аватар для Pooh
409 / 361 / 82
Регистрация: 07.10.2009
Сообщений: 558
25.08.2010, 10:59
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Можно:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
    string f = openFileDialog1.FileName;
    FileInfo fileInfo = new FileInfo(f);
    switch(fileInfo.Extension)
    {
        case ".txt":
            MessageBox.Show("txt");
            break;
        case ".dat":
            MessageBox.Show("dat");
            break;
    }
}
По-моему, так!
0
7 / 7 / 4
Регистрация: 08.07.2010
Сообщений: 116
25.08.2010, 11:24  [ТС]
C#
1
2
3
4
5
6
7
8
9
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
string baseFolder = "C:\\пример";
            string subFolder = string.Empty;
            OpenFileDialog OP = new OpenFileDialog();
                OP.FileName = "";
                OP.Filter = "TXT (*.txt)|*.txt| dat (*.dat)|*.dat";
                OP.Title = "Открыть документ";
                
                
                if (OP.ShowDialog() != DialogResult.Cancel)
                {
                    string f = OP.FileName;
                    FileInfo fileInfo = new FileInfo(f);
                    switch (fileInfo.Extension)
                    {
                        case ".txt":
                            MessageBox.Show("txt");
                            break;
                        case ".dat":
                            MessageBox.Show("dat");
                            break;
                    }
                    using (StreamReader sr = new StreamReader(OP.FileName))
                    {
                        StreamWriter sw = null;
                        sr.ReadLine();
                        string line;
                        while ((line = sr.ReadLine()) != null)
                        {
                            string text = line.Substring30, 3).Trim();
                            string folder = line.Substring(0, 11).Trim();
                            bool endOfData = text.LastIndexOf(" 0") == text.Length - 2;
 
                            if (endOfData)
                            {
                                if (sw != null)
                                {
                                    sw.Close();
                                    sw = null;
                                }
                            }
                            else
                            {
                                if (sw == null)
                                {
                                    subFolder = Path.Combine(baseFolder, folder);
                                    Directory.CreateDirectory(subFolder);
 
                                    sw = new StreamWriter(File.Create(Path.Combine(subFolder, text)));
                                }
                            }
 
                            if (sw != null)
                            {
                                sw.WriteLine(line.Substring(0, 30));
                            }
                        }
 
                        if (sw != null)
                        {
                            sw.Close();
                            sw = null;
                        }
                    }
                    using (StreamReader sr = new StreamReader(OP.FileName))
                    {
                        StreamWriter sw = null;
                        sr.ReadLine();
                        string line;
                        while ((line = sr.ReadLine()) != null)
                        {
                            string text = line.Substring(25, 3).Trim();
                            string folder = line.Substring(0, 11).Trim();
                            bool endOfData = text.LastIndexOf(" 0") == text.Length - 2;
 
                            if (endOfData)
                            {
                                if (sw != null)
                                {
                                    sw.Close();
                                    sw = null;
                                }
                            }
                            else
                            {
                                if (sw == null)
                                {
                                    subFolder = Path.Combine(baseFolder, folder);
                                    Directory.CreateDirectory(subFolder);
                                    sw = new StreamWriter(File.Create(Path.Combine(subFolder, text)));
                                }
                            }
 
                            if (sw != null)
                            {
                                sw.WriteLine(line.Substring(0, 25));
                            }
                        }
 
                        if (sw != null)
                        {
                            sw.Close();
                            sw = null;
                        }
                    }
                }
так сделал, но чет немного не правильно работает) как правильней твой код вписать?
0
 Аватар для Pooh
409 / 361 / 82
Регистрация: 07.10.2009
Сообщений: 558
25.08.2010, 11:32
C#
1
2
3
4
5
6
7
8
9
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
string baseFolder = "C:\\пример";
            string subFolder = string.Empty;
            OpenFileDialog OP = new OpenFileDialog();
                OP.FileName = "";
                OP.Filter = "TXT (*.txt)|*.txt| dat (*.dat)|*.dat";
                OP.Title = "Открыть документ";
                
                
                if (OP.ShowDialog() != DialogResult.Cancel)
                {
                    string f = OP.FileName;
                    FileInfo fileInfo = new FileInfo(f);
                    switch (fileInfo.Extension)
                    {
                        case ".txt":
                            using (StreamReader sr = new StreamReader(OP.FileName))
                    {
                        StreamWriter sw = null;
                        sr.ReadLine();
                        string line;
                        while ((line = sr.ReadLine()) != null)
                        {
                            string text = line.Substring30, 3).Trim();
                            string folder = line.Substring(0, 11).Trim();
                            bool endOfData = text.LastIndexOf(" 0") == text.Length - 2;
 
                            if (endOfData)
                            {
                                if (sw != null)
                                {
                                    sw.Close();
                                    sw = null;
                                }
                            }
                            else
                            {
                                if (sw == null)
                                {
                                    subFolder = Path.Combine(baseFolder, folder);
                                    Directory.CreateDirectory(subFolder);
 
                                    sw = new StreamWriter(File.Create(Path.Combine(subFolder, text)));
                                }
                            }
 
                            if (sw != null)
                            {
                                sw.WriteLine(line.Substring(0, 30));
                            }
                        }
 
                        if (sw != null)
                        {
                            sw.Close();
                            sw = null;
                        }
                    }
                            break;
                        case ".dat":
                            using (StreamReader sr = new StreamReader(OP.FileName))
                    {
                        StreamWriter sw = null;
                        sr.ReadLine();
                        string line;
                        while ((line = sr.ReadLine()) != null)
                        {
                            string text = line.Substring(25, 3).Trim();
                            string folder = line.Substring(0, 11).Trim();
                            bool endOfData = text.LastIndexOf(" 0") == text.Length - 2;
 
                            if (endOfData)
                            {
                                if (sw != null)
                                {
                                    sw.Close();
                                    sw = null;
                                }
                            }
                            else
                            {
                                if (sw == null)
                                {
                                    subFolder = Path.Combine(baseFolder, folder);
                                    Directory.CreateDirectory(subFolder);
                                    sw = new StreamWriter(File.Create(Path.Combine(subFolder, text)));
                                }
                            }
 
                            if (sw != null)
                            {
                                sw.WriteLine(line.Substring(0, 25));
                            }
                            break;
                    }
По-моему, так!
0
7 / 7 / 4
Регистрация: 08.07.2010
Сообщений: 116
25.08.2010, 11:51  [ТС]
что-то не могу запустить, пишет как будто } не закрыто, вроде все позакрывал
0
 Аватар для Pooh
409 / 361 / 82
Регистрация: 07.10.2009
Сообщений: 558
25.08.2010, 11:58
Цитата Сообщение от Marych Посмотреть сообщение
пишет как будто } не закрыто, вроде все позакрывал
Значит не все закрыли, в последнем моем посте я копипастом переделал Ваш код из предыдущего поста, вполне могли скобки где-то потеряться.
0
7 / 7 / 4
Регистрация: 08.07.2010
Сообщений: 116
25.08.2010, 12:03  [ТС]
вроде исправил, теперь ругается на
C#
1
case ".dat":
пишет Control cannot fall through from one case label ('case ".dat":') to another
0
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
25.08.2010, 12:16
Цитата Сообщение от Marych Посмотреть сообщение
пишет Control cannot fall through from one case label ('case ".dat":') to another
C#
1
break;
после блока кода забыл
2
 Аватар для Pooh
409 / 361 / 82
Регистрация: 07.10.2009
Сообщений: 558
25.08.2010, 12:25
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вот рабочий код:
C#
1
2
3
4
5
6
7
8
9
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
string baseFolder = "C:\\пример";
            string subFolder = string.Empty;
            OpenFileDialog OP = new OpenFileDialog();
                OP.FileName = "";
                OP.Filter = "TXT (*.txt)|*.txt| dat (*.dat)|*.dat";
                OP.Title = "Открыть документ";
                
                
                if (OP.ShowDialog() != DialogResult.Cancel)
                {
                    string f = OP.FileName;
                    FileInfo fileInfo = new FileInfo(f);
                    switch(fileInfo.Extension)
                    {
                            case ".txt":
                                    using (StreamReader sr = new StreamReader(OP.FileName))
                    {
                        StreamWriter sw = null;
                        sr.ReadLine();
                        string line;
                        while ((line = sr.ReadLine()) != null)
                        {
                            string text = line.Substring(30, 3).Trim();
                            string folder = line.Substring(0, 11).Trim();
                            bool endOfData = text.LastIndexOf(" 0") == text.Length - 2;
 
                            if (endOfData)
                            {
                                if (sw != null)
                                {
                                    sw.Close();
                                    sw = null;
                                }
                            }
                            else
                            {
                                if (sw == null)
                                {
                                    subFolder = Path.Combine(baseFolder, folder);
                                    Directory.CreateDirectory(subFolder);
 
                                    sw = new StreamWriter(File.Create(Path.Combine(subFolder, text)));
                                }
                            }
 
                            if (sw != null)
                            {
                                sw.WriteLine(line.Substring(0, 30));
                            }
                        }
 
                        if (sw != null)
                        {
                            sw.Close();
                            sw = null;
                        }
                    }
 
                                    break;
                            case ".dat":
                                    using (StreamReader sr = new StreamReader(OP.FileName))
                    {
                        StreamWriter sw = null;
                        sr.ReadLine();
                        string line;
                        while ((line = sr.ReadLine()) != null)
                        {
                            string text = line.Substring(25, 3).Trim();
                            string folder = line.Substring(0, 11).Trim();
                            bool endOfData = text.LastIndexOf(" 0") == text.Length - 2;
 
                            if (endOfData)
                            {
                                if (sw != null)
                                {
                                    sw.Close();
                                    sw = null;
                                }
                            }
                            else
                            {
                                if (sw == null)
                                {
                                    subFolder = Path.Combine(baseFolder, folder);
                                    Directory.CreateDirectory(subFolder);
                                    sw = new StreamWriter(File.Create(Path.Combine(subFolder, text)));
                                }
                            }
 
                            if (sw != null)
                            {
                                sw.WriteLine(line.Substring(0, 25));
                            }
                        }
 
                        if (sw != null)
                        {
                            sw.Close();
                            sw = null;
                        }
                    }
 
                                    break;
                    }
                }
1
7 / 7 / 4
Регистрация: 08.07.2010
Сообщений: 116
25.08.2010, 14:19  [ТС]
спасибо

Добавлено через 1 час 53 минуты
подскажите еще плиз, хочу сделать еще для файлов с любым расширением, добавил фильтр
C#
1
OP.Filter = "TXT (*.txt)|*.txt| dat (*.dat)|*.dat| All (*.*)|*.*";
в case написал
C#
1
case ".*":
но ничего не происходит
0
 Аватар для Pooh
409 / 361 / 82
Регистрация: 07.10.2009
Сообщений: 558
25.08.2010, 14:26
А что нужно сделать со всеми остальными файлами?
0
7 / 7 / 4
Регистрация: 08.07.2010
Сообщений: 116
25.08.2010, 14:28  [ТС]
либо первое, либо второе действие
0
 Аватар для Pooh
409 / 361 / 82
Регистрация: 07.10.2009
Сообщений: 558
25.08.2010, 14:32
C#
1
2
3
                default:
                        MessageBox.Show(".*");'Вместо этой строки впишите действия, которые должны выполняться со всеми прочими файлами
                        break;
Это для всех остальных случаев, и действие должно быть только одно, а не или то или другое, иначе расширения файлов необходимо еще как-то сортировать.
1
 Аватар для lex1990able
2 / 2 / 1
Регистрация: 22.04.2010
Сообщений: 37
27.08.2010, 15:58
попробуй вместо case ".*" написать
C#
1
default:
1
7 / 7 / 4
Регистрация: 08.07.2010
Сообщений: 116
27.08.2010, 16:12  [ТС]
так и сделал пасиба) правда тебя Pooh опередил)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.08.2010, 16:12
Помогаю со студенческими работами здесь

Какие библиотеки python для преобразования файлов разных типов в xml?
Нужно преобразовать файлы разных типов (html, txt, pdf) в xml.

Открытие разных типов файлов
Добрый день. Я тут задался вопросом "а можно ли открыть изображение через fstream в бинарном режиме?", через пару минут понял что нет....

Несколько файлов разных типов в одном
Здравствуйте. Пишу интерфейс для выполнения лабораторных работ, возникла следующая задачка. Исходные данные к каждой работе -...

Разное отображение для разных страниц 2.5+
Добрый день, решил заняться интеграцией верстки в Joomla 2.5+. Вопрос, как сделать разное отображение для разных страниц? Например,...

Разное лого для разных статей
Задача: Нужно в мобильной версии под конкретную запись изменить шапку, а конкретно поменять лого. Вот код, который выводит лого: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru