Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение имён файлов в директори, помогите разобраться с folderBrowserDia 
:(
    Опции темы
sergy
Дата 13.1.2008, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



Здравствуйте. Помогите плз разобратсья с folderBrowserDialog.
Мне необходимо открыть файл из папки в picturebox и после этого создать кнопку "следующее изображение" при нажатии которой будет открываться следующий файл из текущей директории.

вот так я открываю первый файл и запоминаю директорию:

Код

if(folderBrowserDialog1->ShowDialog()==DialogResult::OK)
             {
                 folderName = folderBrowserDialog1->SelectedPath;
                openFileDialog1->InitialDirectory = folderName;
                openFileDialog1->ShowDialog();
                if(openFileDialog1->FilterIndex==1) {
pictureBox1->Image = Image::FromFile(openFileDialog1->FileName,"\\*.jpeg");
statusBar1->Text = folderName;
            
}
}


а как мне получить имена всех файлов в этой директории? подскажите плз.

Это сообщение отредактировал(а) sergy - 13.1.2008, 13:50
PM MAIL   Вверх
farad
Дата 13.1.2008, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 1.11.2007

Репутация: 3
Всего: 6



Код

System.IO.Directory.GetFiles(@"c:\")

PM MAIL   Вверх
sergy
Дата 13.1.2008, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



Огромное спасибо, за быстрый ответ.


и ещё один вопросик:

в MSDN говорится как отфильтровать только по 1 типу файлов.
Код

files = IO::Directory::GetFiles(folderName, "*.jpg");

 а как мне задать несколько типов?


Это сообщение отредактировал(а) sergy - 13.1.2008, 17:33
PM MAIL   Вверх
farad
Дата 13.1.2008, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 1.11.2007

Репутация: 3
Всего: 6



Цитата(sergy @  13.1.2008,  17:02 Найти цитируемый пост)
 а как мне задать несколько типов?
по очереди

PM MAIL   Вверх
sergy
Дата 14.1.2008, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



Цитата(farad @ 13.1.2008,  22:43)
Цитата(sergy @  13.1.2008,  17:02 Найти цитируемый пост)
 а как мне задать несколько типов?
по очереди

а можнь поконкретнее? пробовал подряд прописывать. возвращает пустой массив.

Код

files = IO::Directory::GetFiles(folderName, "*.jpg *.gif");


Код

files = IO::Directory::GetFiles(folderName, "*.jpg, *.gif");


Код

files = IO::Directory::GetFiles(folderName, "*.jpg; *.gif");


Код

files = IO::Directory::GetFiles(folderName, "*.jpg|*.gif");


Код

files = IO::Directory::GetFiles(folderName, "*.jpg""*.gif");


Код

files = IO::Directory::GetFiles(folderName, "*.jpg","*.gif");


Код

files = IO::Directory::GetFiles(folderName, "*.jpg"|"*.gif");


Код

files = IO::Directory::GetFiles(folderName, "*.jpg";"*.gif");


Код

files = IO::Directory::GetFiles(folderName, "(*.jpg) (*.gif)");


Код

files = IO::Directory::GetFiles(folderName, "(*.jpg), (*.gif)");


Код

files = IO::Directory::GetFiles(folderName, "(*.jpg);(*.gif)");


Код

files = IO::Directory::GetFiles(folderName, "(*.jpg)|(*.gif)");


у меня уже фантазии не хватает  smile 

 smile 
PM MAIL   Вверх
mr.DUDA
Дата 14.1.2008, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



С разделителями не получится, GetFiles их не понимает. Поэтому только по порядку:
Код
        List<string> GetMyFiles(string folderName, string searchPattern)
        {            
            List<string> ret = new List<string>();
            string[] extensions = searchPattern.Split(';', '|', ',');
            foreach (string ext in extensions)
            {
                if (!string.IsNullOrEmpty(ext))
                    ret.AddRange(Directory.GetFiles(folderName, ext));
            }
            return ret;
        }

        void DoSome()
        {
            List<string> fileNames = GetMyFiles("c:\\", "*.ini;*.sys");
        }


На С++ сами переводите.


--------------------
user posted image
PM MAIL WWW   Вверх
sergy
Дата 15.1.2008, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



спасибо, но не по силам это для меня ))

а если сделать вот так:
Код


files = IO::Directory::GetFiles(folderName, "*.jpg");
    files2 = IO::Directory::GetFiles(folderName, "*.gif");
    files3 = IO::Directory::GetFiles(folderName, "*.png");
    files4 = IO::Directory::GetFiles(folderName, "*.bmp");

но проблема очередная. теперь бы всё это в один массив запихнуть и будет супер. если подскажете как это сделать, то буду очень признателен и наверное это будет последний мой вопрос smile

вообще никак не могу найти как в С++ дописывать в переменные значения. например в php можно сделать так:
Код

$var = "123";
$vaf .="456";


    echo $var ---->123456

Это сообщение отредактировал(а) sergy - 15.1.2008, 00:32
PM MAIL   Вверх
farad
Дата 15.1.2008, 10:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 1.11.2007

Репутация: 3
Всего: 6



Цитата(sergy @  15.1.2008,  00:27 Найти цитируемый пост)
 теперь бы всё это в один массив запихнуть и будет супер

Код

 array<String^>^files1=System::IO::Directory::GetFiles("c:\\", "*.gif");
 array<String^>^files2=System::IO::Directory::GetFiles("c:\\", "*.jpg");
 array<String^>^files_all=gcnew array<String ^>(files1->Length+files2->Length);
 int i=0;
 int j=0;
 while(j<files1->Length)
     files_all[i++]=files1[j++];
 j=0;
 while(j<files2->Length)
     files_all[i++]=files2[j++];

 - всетаки чудовищный синтаксис  smile 

Цитата(sergy @  15.1.2008,  00:27 Найти цитируемый пост)
 как в С++ дописывать в переменные значения

Код

var="123";
var+="456";




Это сообщение отредактировал(а) farad - 15.1.2008, 10:31
PM MAIL   Вверх
sergy
Дата 15.1.2008, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



farad, спасибо большое!

Но при компиляции этого кода в строке    
Код

files_all[i++]=files1[j++];

 получаю ошибку:

An unhandled exception of type 'System.NullReferenceException' occurred in IV.exe

Additional information: Object reference not set to an instance of an object.

PM MAIL   Вверх
farad
Дата 15.1.2008, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 1.11.2007

Репутация: 3
Всего: 6



ну я же набросал примерный вариант. Конечно нужно проверять, не указывают ли ссылки на null.
PM MAIL   Вверх
sergy
Дата 15.1.2008, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



Вы это имели ввиду?
Код

if(files1 != NULL){
j=0;
while(j<files1->Length){
if(files1[j++] != NULL)
    files[i++]=files1[j];

}


к сожалению, ошибка осталась.
PM MAIL   Вверх
CYBERDREAM
Дата 16.1.2008, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 4
Всего: 28



мне кажется ты инкремируешь j не в том месте, (хотя может я ошибаюсь). Попробуй так:
Код

if(files1 != NULL){
j=0;
while(j<files1->Length){
if(files1[j] != NULL)
    files[i++]=files1[j++];
}



--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
farad
Дата 16.1.2008, 10:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 1.11.2007

Репутация: 3
Всего: 6



Цитата(sergy @  15.1.2008,  23:08 Найти цитируемый пост)
Вы это имели ввиду?код:if(files1 != NULL)
 smile Разумеется нет!
Цитата(sergy @  15.1.2008,  23:08 Найти цитируемый пост)
if(files1[j++] != NULL)   files[i++]=files1[j];
и не это точно!
вот рабочий код, в котором не нужна проверка на null, копируете по буквам:
Код

    private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) 
             {
             
                
                 array<String^>^files1=System::IO::Directory::GetFiles("c:\\", "*.gif");
                 array<String^>^files2=System::IO::Directory::GetFiles("c:\\", "*.jpg");
                 array<String^>^files_all=gcnew array<String ^>(files1->Length+files2->Length);

                 int i=0;
                 int j=0;
                 while(j<files1->Length)
                     files_all[i++]=files1[j++];
                 j=0;
                 while(j<files2->Length)
                     files_all[i++]=files2[j++];

                 for(i=0;i<files_all->Length;i++)
                 System::Diagnostics::Debug::WriteLine(files_all[i]);
             }
 к слову сказать, если требуется проверка ссылочных переменных - инициализированы они или нет, то для этого используют не сишный макрос NULL, а слово nullptr. Для данного примера следует писать так:
Код

if(files_all==nullptr)return;

Может быть стоит что-то почитать по теме?

PM MAIL   Вверх
sergy
Дата 16.1.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



Огромное всем спасибо за помощь. Мог бы, поставил бы всем +10 )
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0654 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.