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

Копирование файлов, указанных в .txt-файле

29.10.2018, 10:41. Показов 1641. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется программа: считываются 2 директории (допустим "a" и "b"). В директории "a" не хватает файлов из директории "b", имена файлов из них заносятся в StringGrid. После чего происходит фильтрация и в .txt-файлик заносятся имена файлов, которых не хватает. Как мне из директории "b" в диреткорию "a" скопировать файлы, имена которых указаны в .txt-файлике?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.10.2018, 10:41
Ответы с готовыми решениями:

Копирование файлов, указанных параметром
Допустим есть файлы res01.dll;res02.dll...res20.dll. При открытии bat файла он должен запросить какой файл переносить допустим...

Копирование файлов, указанных аргументами bat-файла, в один каталог
Написать bat файл для обработки фиксированного числа параметров. Согласно условию задачи в каталоге с именем 123 создать несколько...

Копирование txt файлов
вссем привет! нужно открыть один файл, потом открыть/очистить второй файл, скопировать первый во второй (речь идет о тхт-файлах). пробую...

13
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
29.10.2018, 11:59
C++
1
2
3
4
5
6
7
8
    TStringList *LL = new TStringList;
    LL->LoadFromFile("flist.txt");
    for(int i=0;i<LL->Count;i++)
     if(FileExists("b\\"+LL->Strings[i]) && !FileExists(
        "a\\"+ExtractFileName(LL->Strings[i])))
      CopyFile(LL->Strings[i].c_str(),
       ("a\\"+ExtractFileName(LL->Strings[i])).c_str(),true);
    delete LL;
Добавлено через 2 минуты
Если в текстовом файле чисто имена файлов (без пути), то ExtractFileName не нужен.
1
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 8
29.10.2018, 14:02  [ТС]
Сейчас попробую, спасибо

Добавлено через 20 минут
в 7 строке переписал
C++
1
String ("a\\").c_str(),true);
Потому что просто ковычки с c_str() не пашут. Но копирование не происходит. Может ли это быть потому, что в txt имена файлов заносятся без расширения (.msi или .exe)?

Добавлено через 21 минуту
нет, не может. убирал условие, пробовал разные вариации...
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
29.10.2018, 14:14
Я обычно выкладываю рабочие варианты.
Покажите ваш кусок программы с этим кодом.
0
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 8
29.10.2018, 14:22  [ТС]
C++
1
2
3
4
5
6
7
8
TStringList *LL = new TStringList;
    LL->LoadFromFile("comp.txt");
    for(int i=0;i<LL->Count;i++){
     if(FileExists("\\\\Soft\\Chrome\\"+LL->Strings[i]) && !FileExists(
        "C:\\Users\\User\\Desktop\\Chrome\\"))
      CopyFile(LL->Strings[i].c_str(),
       String ("C:\\Users\\User\\Desktop\\Chrome\\").c_str(),true);}
    delete LL;
Это тестовая версия, потому директории произвольные
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
29.10.2018, 14:39
Лучший ответ Сообщение было отмечено Doctopo4timuj как решение

Решение

Вы в команде "копировать" указали только пути. Вот так будет работать__
C++
1
2
3
4
5
6
7
8
TStringList *LL = new TStringList;
    LL->LoadFromFile("comp.txt");
    for(int i=0;i<LL->Count;i++){
     if(FileExists("\\\\Soft\\Chrome\\"+LL->Strings[i]) && !FileExists(
        "C:\\Users\\User\\Desktop\\Chrome\\"+LL->Strings[i]))
      CopyFile(LL->Strings[i].c_str(),
       String("C:\\Users\\User\\Desktop\\Chrome\\"+LL->Strings[i]).c_str(),true);}
    delete LL;
(Имя файла тоже нужно.)
0
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 8
29.10.2018, 14:48  [ТС]
К сожалению нет, так тоже не работает((
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33403 / 21513 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
29.10.2018, 14:58
На содержимое текстового файла (и на скриншот эксплорера заодно, чтобы видеть, как эти файлы действительно называются, с расширениями, желательно) можно посмотреть? Заодно неплохо было бы озвучить версию Билдера.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
29.10.2018, 14:58
Тогда ещё и содержимое "comp.txt" желательно (у меня же приведённый выше текст отработал, я даже специально сетевой хост "Soft" создал для чистоты эксперимента как говорится). Или "не работает" в другом месте.
0
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 8
29.10.2018, 15:05  [ТС]
Chrome_32
Chrome_XP

Вот так они отображаются в "comp.txt". Их не хватает в папке на рабочем столе. Я пробовал приписать расширение:
Chrome_32.msi
Chrome_XP.msi

Но и это не помогло. Хотя если писать в CopyFile конкретно один из них, а не пытаясь взять из txt, то копируется без проблем.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
29.10.2018, 15:08
Да, pardon, просмотрел ошибку... (у меня файлы из списка рядом с программой, потому и сработало). Надо путь к источнику указать в команде копирования.
C++
1
2
 CopyFile(("\\\\Soft\\Chrome\\"+LL->Strings[i]).c_str(),
       String("C:\\Users\\User\\Desktop\\Chrome\\"+LL->Strings[i]).c_str(),true);}
Добавлено через 1 минуту
П.С. и в списке имена файлов должны быть реальные (с расширением).
1
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 8
29.10.2018, 15:12  [ТС]
RAD 10.1

Ну вот так это выглядит
Миниатюры
Копирование файлов, указанных в .txt-файле   Копирование файлов, указанных в .txt-файле   Копирование файлов, указанных в .txt-файле  

0
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 8
29.10.2018, 15:16  [ТС]
Сработало! Спасибо большое. Осталось только разобраться, как из StringGrid'a выносить с расширением, но это я сам)
0
Модератор
 Аватар для D1973
9929 / 6466 / 2457
Регистрация: 21.01.2014
Сообщений: 27,420
Записей в блоге: 3
30.10.2018, 07:10
Цитата Сообщение от Doctopo4timuj Посмотреть сообщение
RAD 10.1
Ну так используйте функции модуля IOUtils... И совсем ни к чему заморачиваться с каким-то промежуточным текстовиком...
Файл *.h
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
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <System.IOUtils.hpp> //Добавить этот хэдер
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
//---------------------------------------------------------------------------
//Это класс самой формы...
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    TMemo *Memo1;
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//Добавить этот класс
class TFilterer : public TCppInterfacedObject<TDirectory::TFilterPredicate>
{
    String OurPath;
public:
    TFilterer(String s) : OurPath(s)
    {
    }
 
    bool __fastcall Invoke(const UnicodeString Path, const TSearchRec &SearchRec)
    {
        return !TFile::Exists(OurPath + SearchRec.Name);
    }
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
файл *.cpp - событие нажатия на кнопку
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  String Src = "C:\\tmp\\B\\", Dst = "C:\\TMP\\A\\";
//Определили наши папки
  TStringDynArray A = TDirectory::GetFiles(Src, "*.*",
                                           TSearchOption::soTopDirectoryOnly,
                                           new TFilterer(Dst));
//получили список файлов папки В, которых нет в папке А
  for(int i = 0; i < A.Length; i++)
   TFile::Copy(A[i], Dst + ExtractFileName(A[i]));
//Скопировали недостающие файлы в папку А
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.10.2018, 07:10
Помогаю со студенческими работами здесь

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

Поиск строк в txt файле и копирование в другой упорядоченно
Ребята образовалась такая проблема, так как я в этом не силён:(. Суть в том что заголовки(object_0,object_0,object_2) в txt(Визу указал...

Копирование файлов по именам, извлеченным из txt
Добрый день всем. Продолжая обучения delphi наткнулся на новую проблему. Не пойму как реализовать копирование файлов с каталога....

Копирование файлов из 2-ух сравниваемых списков в .txt
Добрый день. Очень нужен батник, есть 2 папки в них файлы с подкаталогами. Надо первое! вынести список этих файлов которых в них...

Копирование TXT-файлов из одной папки и BMP-файлов из другой папки в папку, в которой находится пакетный файл
Доброго времени суток. У кого есть возможность сообразить какой код мне нужет чтобы сделать вот это) - Копирование всех файлов с...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru