Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Giggs131
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 19
#1

Работа с файлами и директории. - C++

16.09.2010, 19:27. Просмотров 1337. Ответов 4
Метки нет (Все метки)

Пожалуйста,помогите решить..В субботу экзамен,а я физически не успеваю написать 6 программок..(


Необходимо создать следующий набор программ:

Программа для копирования каталогов (копируются все вложенные папки и файлы).
Программа для перемещения каталогов (перемещаются все вложенные папки и файлы).
Программа для удаления каталогов (удаляются все вложенные папки и файлы).

В том случае, если у удаляемого файла (каталога) установлен атрибут Read-Only, необходимо вывести следующее меню: 1. Удалять? 2. Пропустить? 3.Удалять для всех? 4. Отмена?

Для функций копирования и перемещения выполнить те же действия: 1. Перезаписать? 2. Пропустить? 3. Перезаписывать для всех? 4. Отмена?

Параметры программы передаются через командную строку. Например,

copy.exe c:\A d:\B
move.exe c:\A d:\B
delete.exe c:\A
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2010, 19:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с файлами и директории. (C++):

Работа с файлами - C++
Все привет! Возник вопрос. Имеется текстовый файл. В нем есть несколько строк. Мне необходимо изменять их и добавлять новые данные в файл. ...

Работа с файлами - C++
Ребят у кого есть возможность распишите как лучше сделать для лабы надо. Заранее спасибо Задание: Создать структуру Работник, со...

Работа с файлами - C++
у кого есть рабочие примеры роботы с тестовыми файлами на С(считать с файла и вывести на экран,записать в файл.... ) поделитесь кодом...

Работа с файлами - C++
Есть файл file.txt и он содержит 3 числа, розделенных пробелом, например, 3 2 0.1 Как считать информацию с файла и записать эти числа в...

Работа с файлами - C++
Доброе утро! Помогите с задачкой В одном файле хранятся сведения об учениках : ФИО , класс, во 2 файле сведения о результатах сдачи...

Работа с файлами! - C++
В каждой строке записано произвольное количество чисел, записанных в форме f. Сформировать новый файл, дописав в начало каждой строки...

4
cmetanka
0 / 0 / 0
Регистрация: 08.07.2017
Сообщений: 18
12.07.2017, 19:43 #2
Giggs131, у меня сейчас тоже самое.может у кого есть код?
0
Antikl
170 / 166 / 49
Регистрация: 15.07.2015
Сообщений: 905
Завершенные тесты: 5
12.07.2017, 19:54 #3
Цитата Сообщение от Giggs131 Посмотреть сообщение
Программа для копирования каталогов
https://rsdn.org/article/qna/baseserv/fileop.xml
0
Геомеханик
623 / 430 / 310
Регистрация: 26.06.2015
Сообщений: 973
13.07.2017, 15:41 #4
Цитата Сообщение от Giggs131 Посмотреть сообщение
Программа для копирования каталогов (копируются все вложенные папки и файлы).
Программа для перемещения каталогов (перемещаются все вложенные папки и файлы).
Вот написал только для windows.
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <stdarg.h>
#include <stack>
#include <string>
typedef std::basic_string<TCHAR> tstring;
bool file_exists(const tstring& fp);
int  write_help(void);
void print(LPCTSTR fmt,...);
void copy_dir(const tstring& old_path, const tstring& new_path, bool move);
 
int _tmain(int argc, LPTSTR argv[]){
    if(argc > 2){
        copy_dir(argv[1], argv[2], false);//копировать
        //copy_dir(argv[1], argv[2], true) перемещение
    }
    return 0;
}
 
//копирование/перемещение
void copy_dir(const tstring& old_path, const tstring& new_path, bool move){
    int     op;
    bool    exist = false, all = false;
    BOOL    ret;
    DWORD   fg;
    HANDLE  fp;
    tstring src, dst;
    WIN32_FIND_DATA fd;
    std::stack<tstring> srm;
    std::stack<std::pair<tstring, tstring> > fs;
 
    tstring d(new_path);
    tstring::size_type i = old_path.rfind(_T('\\'));
    if((i + 1) == old_path.length()){
        if((i = old_path.rfind(_T('\\'), i - 1)) == tstring::npos)
            i = 0;
        else
            ++i;
    } else
        ++i;
 
    if((d.length() > 0) && (d[d.length() - 1] != _T('\\')))
        d += _T('\\');
 
    tstring::const_iterator j = old_path.begin() + i;
    while((j != old_path.end()) && (*j != _T(':')) && (*j != _T('\\')))
        d += *j++;
 
    tstring p(old_path);
    if((p.length() > 0) && (p[p.length() - 1] != _T('\\')))
        p += _T('\\');
    p += _T('*');
 
    fs.push(std::make_pair(p, d));
    p.erase(p.end());
 
    while(!fs.empty()){
        p.swap(fs.top().first);
        d.swap(fs.top().second);
        fs.pop();
 
        fp = FindFirstFile(p.c_str(), &fd);
        if(fp != INVALID_HANDLE_VALUE){
            p.erase(p.end() - 2, p.end());
            exist = false;
 
            if(!CreateDirectoryEx(p.c_str(), d.c_str(), NULL)){
                if(GetLastError() != ERROR_ALREADY_EXISTS){
                    print(_T("Не удалось создать папку, код ошибки: %lu\n"), GetLastError());
                    break;
                }
                exist = true;
            }
 
            do {
                if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
                    if((_tcscmp(fd.cFileName, _T(".")) != 0) && (_tcscmp(fd.cFileName, _T("..")) != 0)){
                        if(!(fd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)){
                            fs.push(std::make_pair(p + _T('\\') + fd.cFileName + _T("\\*"), 
                                    d + _T('\\') + fd.cFileName));
                        }
                    }
                } else {
                    src = p + _T('\\') + fd.cFileName;
                    dst = d + _T('\\') + fd.cFileName;
                    _tprintf(_T("> %s\n"), dst.c_str());
 
                    if(!all && exist && file_exists(dst.c_str())){
                        op = write_help();
                        if(op == 3){
                            all = true;
                            op = 1;
                        } else if(op == 4){
                            FindClose(fp);
                            return;
                        }
                    } else
                        op = 1;
 
                    if((op == 1) && (fd.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
                        SetFileAttributes(dst.c_str(), FILE_ATTRIBUTE_NORMAL);
 
                    if(move){//перемещение
                        if(op == 1){
                            fg  = (_totupper(src[0]) != _totupper(dst[0])) ? MOVEFILE_COPY_ALLOWED : 0;
                            ret = MoveFileEx(src.c_str(), dst.c_str(), fg | MOVEFILE_REPLACE_EXISTING);
                            if(!ret)
                                print(_T("Не удалось переместить файл, код ошибки: %lu\n"), GetLastError());
                        }
                    } else {//копирование
                        if(op == 1){
                            if(!CopyFile(src.c_str(), dst.c_str(), FALSE))
                                print(_T("Не удалось копировать файл, код ошибки: %lu\n"), GetLastError());
                        }
                    }
                }
            } while(FindNextFile(fp, &fd));
            FindClose(fp);
 
            if(move)
                srm.push(p.c_str());
        } else {
            p.erase(p.end() - 1);
            _putts(p.c_str());
            print(_T("Путь не найден, код ошибки: %lu\n"), GetLastError());
        }
    }
 
    for(; !srm.empty(); srm.pop())
        RemoveDirectory(srm.top().c_str());
}
 
bool file_exists(const tstring& fp){
    DWORD fg = GetFileAttributes(fp.c_str());
    if((fg == DWORD(~0)) && (GetLastError() & ERROR_FILE_NOT_FOUND))
        return false;
    return (fg & FILE_ATTRIBUTE_DIRECTORY) ? false : true;
}
 
int write_help(void){
    TCHAR s[] = _T("1.Перезаписать? 2.Пропустить? 3.Перезаписывать для всех? 4.Отмена?");
    CharToOem(s, s);
    _putts(s);
    int n = 0;
    _tscanf(_T("%d"), &n);
    return n;
}
 
void print(LPCTSTR fmt,...){
    TCHAR s[128];
    CharToOem(fmt, s);
    va_list args;
    va_start(args, s);
    _vtprintf(s, args);
    va_end(args);
}
0
cmetanka
0 / 0 / 0
Регистрация: 08.07.2017
Сообщений: 18
13.07.2017, 21:07 #5
Геомеханик, спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2017, 21:07
Привет! Вот еще темы с ответами:

Работа с файлами C++. - C++
Здравствуйте, помогите с поставленной задачей. Из заданного текстового файла вывести на экран и записать в новый файл только...

РАБОТА С ФАЙЛАМИ - C++
Определить, какая буква чаще всего встречается в тексте, находящемся в заданном текстовом файле. помогите пожалуйста:)

Работа с файлами - C++
Помогите решить проблему. Нужно записать найденные значения в файл G(output) Дано 2 файла F(input) и G(output) Программа работает...

Работа с файлами - C++
Напишите пожалуйста программу ( с комментариями по возможности ) Информация об участниках спортивных соревнований содержит: ...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
13.07.2017, 21:07
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru