Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 1

FindFirstFile, FindNextFile в сетевом ресурсе

22.09.2014, 03:06. Показов 1426. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для удобства пользования сетевым ресурсом сделал программу, собирающую в БД все директории удаленного каталога. Проблема в том что связь с ресурсом достаточно медленная (поэтому и решено было сделать прогу) и видимо бывают обрывы(ресурс находится на другом краю страны от меня). По этим причинам теряется некоторое количество папок, каждый раз разное количество вываливается. Функция поиска и записи директорий в БД:
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
__int64            GetFolder( const char* szPath)
{
     AnsiString s;
     int idfolder;
int filetype;
     if( !szPath || !*szPath) return 0;
 
     char Path[ _MAX_PATH];
     WIN32_FIND_DATA      data;
 
     strcpy( Path, szPath);
     if( Path[ strlen( Path) - 1] != '\\')
           strcat( Path, "\\");
     strcat( Path, "*.*");
     HANDLE hFind = FindFirstFile( Path, &data);
     
     if( hFind != INVALID_HANDLE_VALUE)
     {
           while(1)
           {
                 if( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                 {
                       if( strcmp(data.cFileName, ".") && strcmp(data.cFileName, "..") )
                       {
                             char NewPath[_MAX_PATH];
                             const char *cmppath="p:\\";
                             strcpy( NewPath, szPath);
 
                             strcat( NewPath, "\\");
                             strcat( NewPath, data.cFileName);
if(strcmp(szPath,cmppath))
{
s="";
s.cat_sprintf("SELECT idfolder FROM folderbase WHERE (namefolder = '%s' AND path='%s')",ExtractFileName(szPath),ExtractFileDir(szPath));
DataModule1->temp->SQL->Text=s;
DataModule1->temp->Active=true;
idfolder=DataModule1->temp->FieldByName("idfolder")->AsInteger;
    }
    else  idfolder=0;
s="";
 
TDateTime dt=FileTimeToDateTime(data.ftLastWriteTime);
s.cat_sprintf("INSERT INTO folderbase (namefolder,path,idparent,dateadd,filetype) values ('%s','%s',%i, '%s',0)",data.cFileName,szPath,idfolder,dt.FormatString("dd.mm.yyy"));
DataModule1->ADOCommand1->CommandText=s;
DataModule1->ADOCommand1->Execute();
                             i64CountFiles++;
                             GetFolder( NewPath);
                       }
                       
                 }
 
                 BOOL bCode = FindNextFile( hFind, &data);
                 if( !bCode && GetLastError() == ERROR_NO_MORE_FILES)
                       break;
           }
           FindClose( hFind);
     }
     return i64CountFiles;
}
Что можно придумать чтобы в БД попадали все папки?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2014, 03:06
Ответы с готовыми решениями:

FindFirstFile/FindNextFile
В продолжении темы: https://www.cyberforum.ru/cpp-builder/thread386952.html Не получается скопировать, а точнее найти все *.txt...

Работа с файлами поиск файлов FindFirstFile,FindNextFile
Доброго времени суток, спустя долгое время, с измученным гуглом я нашел решение проблемы, но создалась еще одна проблема ...

Интересный баг FindFirstFile/FindNextFile при работе с маской
Пусть есть такие файлы: 1.t 1.tx 1.txt 1.txta FindFirstFile/FindNextFile (а также VCL-евские FindFirst/FindNext) при поиске...

1
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
22.09.2014, 17:04
Форматированный код для глаз полезней...
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
__int64 GetFolder( const char * szPath )
{
    AnsiString s;
    int idfolder;
    int filetype;
 
    if ( !szPath || ! *szPath )
    {
        return 0;
    }
 
    char Path[ _MAX_PATH ];
    WIN32_FIND_DATA data;
 
    strcpy( Path, szPath );
    if ( Path[ strlen( Path ) - 1 ] != '\\' )
    {
        strcat( Path, "\\" );
    }
    strcat( Path, "*.*" );
 
    HANDLE hFind = FindFirstFile( Path, &data );
 
    if ( hFind != INVALID_HANDLE_VALUE )
    {
        while ( 1 )
        {
            if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
            {
                if ( strcmp( data.cFileName, "." ) && strcmp( data.cFileName, ".." ) )
                {
                    char NewPath[ _MAX_PATH ];
                    const char * cmppath = "p:\\";
 
                    strcpy( NewPath, szPath );
                    strcat( NewPath, "\\" );
                    strcat( NewPath, data.cFileName );
 
                    if ( strcmp( szPath, cmppath ) )
                    {
                        s = "";
                        s.cat_sprintf(
                            "SELECT idfolder FROM folderbase WHERE (namefolder = '%s' AND path='%s')",
                            ExtractFileName( szPath ), ExtractFileDir( szPath ) );
                        DataModule1->temp->SQL->Text = s;
                        DataModule1->temp->Active = true;
                        idfolder = DataModule1->temp->FieldByName( "idfolder" )->AsInteger;
                    }
                    else
                    {
                        idfolder = 0;
                    }
                    s = ""; // это так задумано или строчка тоже должна быть под условием else?
 
                    TDateTime dt = FileTimeToDateTime( data.ftLastWriteTime );
                    s.cat_sprintf(
                        "INSERT INTO folderbase (namefolder,path,idparent,dateadd,filetype) values ('%s','%s',%i, '%s',0)",
                        data.cFileName, szPath, idfolder, dt.FormatString( "dd.mm.yyy" ) );
                    DataModule1->ADOCommand1->CommandText = s;
                    DataModule1->ADOCommand1->Execute( );
                    i64CountFiles++ ;
                    GetFolder( NewPath );
                }
 
            }
            BOOL bCode = FindNextFile( hFind, &data );
            if ( !bCode && GetLastError( ) == ERROR_NO_MORE_FILES )
            {
                break;
            }
        }
        FindClose( hFind );
    }
    return i64CountFiles;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.09.2014, 17:04
Помогаю со студенческими работами здесь

FindFirstFile FindNextFile
Помогите, пожалуйста: почему работает, но не так, как надо?? компилится, но все время сообщает FindFirstFile failed И еще: как...

FindFirstFile, FindNextFile и setLocale
Пытался пройти по файлам в каталоге, как в примере на MSDN. Написал такой код #include <windows.h> #include <iostream> ...

FindNextFile,FindFirstFile,FindClose
#include <windows.h> #include <iostream> #include<tchar.h> using namespace std; //strcpy, strcat //_tcscpy,_tcscat int...

Рекурсивный обход (FindFirstFile, FindNextFile)
Здравствуйте. Перед мной стоит задача выполнить поиск и некоторую работу со всеми файлами в определенном каталоге, количества директорий и...

Поиск папок с помощью FindFirstFile\FindNextFile
Как найти только папки?


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru