0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 1

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

22.09.2014, 03:06. Показов 1299. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
Раскрываем внутренние механики Android с помощью контекста и манифеста
mobDevWorks 07.07.2025
Каждый Android-разработчик сталкивается с Context и манифестом буквально в первый день работы. Но много ли мы задумываемся о том, что скрывается за этими обыденными элементами? Я, честно говоря,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru