Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/36: Рейтинг темы: голосов - 36, средняя оценка - 4.61
6140 / 1898 / 14
Регистрация: 07.07.2008
Сообщений: 10,417

Получение списка файлов, на которые ссылаются ярлыки

30.12.2008, 10:28. Показов 7086. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
дано:
1)ярлыки с рабочих столов юзеров.(ярлыки каждого юзера в отдельной папке)
2)C++ builder 6
надо
получить список файлов, на которые ссылаются ярлыки каждого юзера.
имя юзера брать по названию папки.

Например:
Иванов
C:\Documents and Settings\aaa.exe
C:\Intel\bbb.exe
Петров
C:\Program Files\qwer.exe

Я не знаю как:
1)как получить список файлов в папке
2)как получить список папок в папке
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.12.2008, 10:28
Ответы с готовыми решениями:

Ярлыки браузеров ссылаются на .bat
Здравствуйте. Помогите пожалуйста справиться с проблемой. Ярлыки браузеров ссылаются на bat файл. При открытии браузеров открываются...

Ярлыки браузеров ссылаются на .bat
Ярлык браузера ссылается на файлы с расширением .bat(C:\ProgramData\UXdqrULZJN\ZkHxTDG0.bat). После удаления папки с этими...

Ярлыки браузеров ссылаются на .bat
Ярлыки браузера ссылаются на файлы с расширением .bat(C:\ProgramData\OyJxBEdcTyC\mFsqBq4.bat), после удаления папки с этими файлами, и...

45
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
07.01.2009, 14:15
Студворк — интернет-сервис помощи студентам
я вот так пишу в файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
   char mode[5] = "a+b";
   struct stat info;
   AnsiString LogFile = "Log\\" + Login + "_", DateLog = FormatDateTime("ddmmyyyy", Now());
   LogFile += DateLog + ".log";
   stat((LogFile).c_str(), &info);
   FILE* FFile = NULL;
   FFile = fopen(LogFile.c_str(), mode);
   if (FFile == NULL) {
     return;
   }
   fputs(Str.c_str(),FFile);
   fclose(FFile);
а у тебя в пути одной косой не хватает... а на счет if(1) си абсолютно все равно, это уже на совести программера...
0
6140 / 1898 / 14
Регистрация: 07.07.2008
Сообщений: 10,417
07.01.2009, 14:40  [ТС]
list->SaveToFile("C:\\tmp\2.txt");
попробую, но я думал так старые данные в файле перезапишутся.

Добавлено через 1 минуту 41 секунду
черту добавил, но ошибка не пропала.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
07.01.2009, 14:44
у тебя файл прога найти не можешь - C:\\tmp\2.txt - косой не хватает!!!
0
6140 / 1898 / 14
Регистрация: 07.07.2008
Сообщений: 10,417
07.01.2009, 16:37  [ТС]
у тебя файл прога найти не можешь - C:\\tmp\2.txt - косой не хватает!!!
черту добавил, но ошибка не пропала.
помогло вырубание lineage2 такое ощущение что оперативка кончилась, а свопится оно не захотело.

Добавлено через 3 минуты 0 секунд
по варианту охотника list->SaveToFile("C:\\tmp\\2.txt");результа т
L
по моему варианту fwrite(list, sizeof(list), 1, pF2); рузультат
$e@$e@$e@
твой вариант не пробовал(что-то сложно)
в обрабатываемой папке лежат 3 ярлыка
весь текст программы
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
#include <Classes.hpp>
#include <SysUtils.hpp>
#include <stdio.h>
#include <string.h>
#include <conio.h>
 
void main(){
//FILE *pF1 = fopen("C:\\tmp\\1.txt", "rb");
FILE *pF2 = fopen("C:\\tmp\\2.txt", "wt");
if (1)
{
TSearchRec sr;
AnsiString Dir ="C:\\tmp2";
if (FindFirst(Dir+"\\*.*", faAnyFile, sr) == 0)
        {
        do
                {
                if (!(sr.Attr & faDirectory))                         {
                        TStringList *list = new TStringList();
                        list->LoadFromFile(Dir+"\\" + sr.Name);
                        fwrite(list, sizeof(list), 1, pF2);
                        //list->SaveToFile("C:\\tmp\\2.txt");
                        delete list;
                        }
                }
        while (FindNext(sr) == 0);
        }
FindClose(sr);
fclose(pF2);
}
}
Добавлено через 2 минуты 29 секунд
предпологаю, что в моем варианте неправильно
sizeof(list)
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
07.01.2009, 17:02
не заметил твоего сообщения про косую , попробуй так:
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
#include <Classes.hpp>
#include <SysUtils.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <sys\stat.h>
#include <string.h>
#include <conio.h>
void write2file(TStringList *list, AnsiString name){
  char mode[5] = "wt";  
  FILE* FFile = NULL;  
  FFile = fopen(name.c_str(), mode);   
  if (FFile == NULL) {  
    return;  
  }  
  for(int i = 0; i < list->Count; i++)
    fputs(list->Strings[i].c_str(), FFile);  
  }
  fclose(FFile);  
}
void main(){
if (1)
{
TSearchRec sr;
AnsiString Dir ="C:\\tmp2";
if (FindFirst(Dir+"\\*.*", faAnyFile, sr) == 0)
        {
        do
                {
                if (!(sr.Attr & faDirectory))                         {
                        TStringList *list = new TStringList();
                        list->LoadFromFile(Dir+"\\" + sr.Name);
write2file(list, "C:\\tmp\\2.txt");
delete list;
                        }
                }
        while (FindNext(sr) == 0);
        }
FindClose(sr);
}
}
в твоем варианте ты пишешь адрес, потому что объект list записать ну никак не получится целиком записать в файл...
0
6140 / 1898 / 14
Регистрация: 07.07.2008
Сообщений: 10,417
07.01.2009, 17:37  [ТС]
результат L
после for(int i = 0; i < list->Count; i++) пропустил {
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
07.01.2009, 17:43
не работает? скобку пропустил, сорри...
а вообще потрассируй, что там в list попадает... есть там точки останова и isnspect, покажет все свойства, тебе надо Text... там все строки в куче... а вообще что ты хочешь считать из ярлыка? название ехе?
0
6140 / 1898 / 14
Регистрация: 07.07.2008
Сообщений: 10,417
08.01.2009, 10:16  [ТС]
что ты хочешь считать из ярлыка?
путь к файлу, на который он ссылается.
потрассируй
что-что?
есть там точки останова и isnspect, покажет все свойства
эээ???
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
08.01.2009, 10:41
ну пускаешь прогу из билдера, там будут сбоку синие точки... кликни на одной из них, там прога остановиться, потом в пошаговом режиме посмотри, что оно делает... а в меню Run есть команда Inspect, вот и поставь указатель на list и выполни эту операцию, появится окно с значениями разных свойств list... там и увидишь, что оно читает из файла... а что есть: результат L????
0
6140 / 1898 / 14
Регистрация: 07.07.2008
Сообщений: 10,417
08.01.2009, 10:56  [ТС]
*list: { NULL, 0, 0, false, 0 /* Classes::dupIgnore */, false, {NULL,NULL}, {NULL,NULL}, 0 /* Classes::dupIgnore */, false, false, {NULL,NULL}, {NULL,NULL}, { "\0" }, '\0', ... }

list: :008F37C4

Это через watch через инспект копировать тяжело
а что есть: результат L????
да в ерзультирующем вайле записанно
L
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
08.01.2009, 11:11
Lurker, сейчас потестирую прогу сам, что оно там делает...

кривоватая прога вышла, но по крайней мере читает... у тебя первый символ считывался и на том чтение файла заканчивалось, потому что там куча символов с кодом 0 - это в си конец файла, но обошел эту беду и вычитываю только печатаемые символы...
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
#include <Classes.hpp>
#include <SysUtils.hpp>
#include <iostream>
#include <fstream>
using namespace std;
void write2file(TStringList *list, AnsiString name){
  char mode[5] = "wt";
  FILE* FFile = NULL;
  FFile = fopen(name.c_str(), mode);
  if (FFile == NULL) {
    return;
  }
  for(int i = 0; i < list->Count; i++){
    fputs(list->Strings[i].c_str(), FFile);
  }
  fclose(FFile);
};
int main(){
  char T;
  if (1)
  {
    AnsiString Text = "";
    TSearchRec sr;
    AnsiString Dir ="dir";
    if (FindFirst(Dir+"\\*.*", faAnyFile, sr) == 0)
    {
      do
        {
        if(!(sr.Attr & faDirectory)){
          TStringList *list = new TStringList();
          fstream inout((Dir + "\\" + sr.Name).c_str());
          inout.seekg(0);
          list->Clear();
          while(!inout.eof()){
            inout.get(T);
            if((T >= 0x21 && T <= 0xAF) ||
            (T >= 0xE0 && T <= 0xF5)){
              Text += AnsiString(T);
            }
          }
          Text += "\n";
          list->Add(Text);
          write2file(list, "dir\\2.txt");
          delete list;
        }
      }while (FindNext(sr) == 0);
    }
    FindClose(sr);
  }
  return 0;
}
1
6140 / 1898 / 14
Регистрация: 07.07.2008
Сообщений: 10,417
08.01.2009, 15:09  [ТС]
кажется получилось, сейчас проверяю получившийся файл.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
08.01.2009, 15:13
Lurker, оно-то получилось, только я оттуда еще кучу мусора выкинул, ты хоть просвети, зачем тебе это понадобилось...
0
6140 / 1898 / 14
Регистрация: 07.07.2008
Сообщений: 10,417
08.01.2009, 15:52  [ТС]
так, вроде работает.
переходим на следующий уровень сложности.
есть:
dir\a\1.lnk
dir\a\2.lnk
dir\b\1.lnk
dir\b\2.lnk
текущая прога работает только когда
dir\1.lnk
dir\2.lnk
при этом надо после перехода в каждую папку писать ее название

Мои мысли:
надо получить список папок в папке dir(я хз как это сделать наверно по типу как список файлов)
сложить их в стек (в виде \\xxx)
потом
if (FindFirst(Dir+элемент стека+"\\*.*", faAnyFile, sr) == 0)

Добавлено через 1 минуту 9 секунд
у нас 180 юзеров они используют досовские прожки, ярлыки к прожкам лежат на рабочем столе.
Надо узнать какой юзер какие прожки юзает.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
08.01.2009, 15:57
sr.Attr & faDirectory - это проверка на папку, если папка, тогда для нее надо повторять операцию, что у тебя в мэйне весит... рекурсия в общем надо...
0
6140 / 1898 / 14
Регистрация: 07.07.2008
Сообщений: 10,417
10.01.2009, 11:56  [ТС]
if(!(sr.Attr & faDirectory))
а это проверка на НЕ папку?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
10.01.2009, 12:46
ну да... так оно есть...
0
6140 / 1898 / 14
Регистрация: 07.07.2008
Сообщений: 10,417
10.01.2009, 13:30  [ТС]
так, не понял как получить имя папки
или оно вот здесь sr.Attr лежит? Конечно при условии прохождения проверки на папку.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
10.01.2009, 13:54
ну там есть атрибут name - там либо имя файла, либо имя папки
0
6140 / 1898 / 14
Регистрация: 07.07.2008
Сообщений: 10,417
11.01.2009, 14:24  [ТС]
и снова не компилится. ошибка
[C++ Error] Unit1.cpp(72): E2316 'name' is not a member of 'TSearchRec'
вот куски, а в конце целиком прога.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct stst
        {
        stst* l;
        stst* r;
        TSearchRec d;
        };
 
stst* b=NULL;
stst* e=NULL;
...
TSearchRec sr;
...
e->d.name=sr.name;//вот это не компилится
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
#include <Classes.hpp>
#include <SysUtils.hpp>
#include <iostream>
#include <fstream>
struct stst
        {
        stst* l;
        stst* r;
        TSearchRec d;
        };
 
stst* b=NULL;
stst* e=NULL;
stst* q;
void add()
{
q=(stst*)malloc(sizeof(stst));
//q->d=(TSearchRec*)malloc(sizeof(TSearchRec));
q->l=NULL;
q->r=NULL;
if (b==NULL)
        {
        b=q;
        b->l=NULL;
        }
if (e==NULL)
        {
        e=q;
        e->r=NULL;
        }
if (q!=e)
        {
        e->r=q;
        q->l=e;
        e=q;
        }
}
 
 
using namespace std;
void write2file(TStringList *list, AnsiString name){
char mode[5] = "wt";
FILE* FFile = NULL;
FFile = fopen(name.c_str(), mode);
if (FFile == NULL)
        {
        return;
        }
for(int i = 0; i < list->Count; i++)
        {
        fputs(list->Strings[i].c_str(), FFile);
        }
fclose(FFile);
};
 
 
int main(){
 
char T;
AnsiString Text = "";
TSearchRec sr;
AnsiString Dir ="c:\\tmp2";
FILE ffile;
void* b2;
if (FindFirst(Dir+"\\*.*", faAnyFile, sr) == 0)
{
        do
        {
        if(sr.Attr & faDirectory)
                {
                add();
                e->d.name=sr.name;
                а это чтоб дальше не компилилось
                }
        else
                {
                TStringList *list = new TStringList();
                fstream inout((Dir + "\\" + sr.Name).c_str());
                inout.seekg(0);
                list->Clear();
                while(!inout.eof())
                        {
                        inout.get(T);
                        if((T >= 0x21 && T <= 0xAF) ||(T >= 0xE0 && T <= 0xF5))
                                {
                                Text += AnsiString(T);
                                }
                        }
                Text += "\n";
                list->Add(Text);
                write2file(list, "c:\\tmp\\2.txt");
                delete list;
                }
        }
        while (FindNext(sr) == 0);
}
FindClose(sr);
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.01.2009, 14:24
Помогаю со студенческими работами здесь

Ярлыки браузеров ссылаются на файлы .bat
Ярлыки браузеров начали ссылаться на файлы с расширением .bat (C:\ProgramData\eAJrzsenu\CxuGVg0.bat), при этом после удаления папки с этими...

Ярлыки ссылаются на файлы с расширением bat
Антивирус выдает сообщения о подозрительных файлах.

Ярлыки браузеров ссылаются на файлы .bat
Ярлыки браузеров начали ссылаться на файлы с расширением .bat(C:\ProgramData\gFaveww\CxuGVg0.bat), при этом после удаления папки с этими...

Bat файлы ,ярлыки браузеров ссылаются на них
Добрый вечер!. При входа в программу google , открывается cmd (в ней что-то происходит ,ip адреса и ещё что-то , ссылки на bat файлы)...

Ярлыки браузеров ссылаются на файлы с расширением .bat
Ярлыки браузеров начали ссылаться на файлы с расширением .bat(C:\ProgramData\OyJxBEdcTyC\mFsqBq4.bat), при этом после удаления папки с...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
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
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru