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

Работа с файлами. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
05.05.2010, 19:17     Работа с файлами. #1
Всем Доброго времени суток. С сегодняшнего дня в инсте стали задавать задачи, на работу с файлами. Раньше с таким не сталкивался, поэтому не знаю как решить. Вот примеры задач:

1) Дан файл целых чисел, содержащий не менее четырех элементов. Вывести первый, второй, предпоследний и последний элементы данного файла.

2) Даны имена двух файлов вещественных чисел. Известно, что первый из них существует и является непустым, а второй в текущем каталоге отсутствует. Создать отсутствующий файл и записать в него начальный и конечный элементы существующего файла (в указанном порядке).

3) Даны два файла произвольного типа. Поменять местами их содержимое.

Пожалуйста, если кто сможет, поделитесь литературой на работу с файлами в среде Си, также, был бы благодарен, если кто-нибудь привёл решение, по вышеуказанным задачам, в качестве шаблона, и объяснил код (язык Си). Заранее спасибо.

Добавлено через 3 часа 31 минуту
Тема ещё актуальна
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2010, 19:17     Работа с файлами.
Посмотрите здесь:

C++ Работа с файлами
C++ Работа с файлами
C++ Работа с файлами
C++ С++ Работа с файлами!!!!
C++ Работа с файлами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
06.05.2010, 01:01     Работа с файлами. #2
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
#include <stdio.h>
#include <stdlib.h>
 
/*  
*   Дан файл целых чисел, содержащий не менее четырех элементов. 
*   Вывести первый, второй, предпоследний и последний элементы данного файла.
*/
    
#define FILE_NAME "numbers.txt"
 
int main(void){
    int numbers[2], pos;
    FILE *f;
    
    if ( ( f = fopen(FILE_NAME, "r") ) == NULL ){
        perror("fopen");
        exit(1);
    }
    if ( fscanf(f, "%d %d", numbers, numbers + 1) != 2 ){
        perror("fscanf");
        if ( fclose(f) )
            perror("fclose");
        exit(1);
    }
    printf("%d %d ", *numbers, *(numbers + 1));
    pos = 0;
    while ( fscanf(f, "%d", &numbers[pos]) == 1 )
        pos ^= 1;
    if ( ferror(f) ){
        fprintf(stderr, "Can't read from file!\n");
        if ( fclose(f) )
            perror("fclose");
        exit(1);
    }
    fclose(f);
    
    printf("%d ", numbers[pos]);
    pos ^= 1;
    printf("%d\n", numbers[pos]);
    
    exit(0);
}
со вторым ещё проще
C
1
2
3
4
5
6
7
8
9
10
11
12
...
FILE *fin, *fout;
double tmp;
...
fin = fopen("input.txt", "r");
fout = fopen("out.txt", "w");
fscanf(fin, "%lf", &tmp);
fprintf(fout, "%f\n", tmp);
while ( fscanf(fin, "%lf", &tmp) == 1 )
  ;
fprintf(fout, "%f\n", tmp);
...
а с третьим заданием - по-моему проще сначала файлы друг в дружку переименовать а потом переместить первый туда, где второй, а второй туда, где только-что был первый. Осталось только тут соответствующие API функции найти...

По поводу книжки - Керниган и Ритчи в первую очередь.
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
06.05.2010, 08:50  [ТС]     Работа с файлами. #3
Помогите пожалуйста, в чём ошибка? В первой задаче пишет, что дирректории не существует. Я создал файл здесь P:\\@_АиП\\Задание 5\\1\\numbers.txt
и соответственно объявил его здесь
C
1
#define FILE_NAME "P:\\@_АиП\\Задание 5\\1\\numbers.txt"
А программа пишет нет файла или папки..(
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
06.05.2010, 09:52     Работа с файлами. #4
Bloodykeeper, видимо, из-за русских букв в пути. В винде они как-то очень чуднО на самом деле обрабатываются... Будьте проще - пишите файл в папку с программой.

Не по теме:

Когда-то давно работал в одном околомедицинском журнале. Пришла туда авторша - барышня молодая, уселась за мак (lc2 если кто такие помнит ) и стала статью писать. Как дописала, спрашивает - а файлы так же, как в досовском ворде, нужно называть? - Нет, говорю, 31 буква и пиши, чё хочешь. Ну она и написала "Гимнастика в жизни Льва Толстого". Дорвалась, короче, после 8.3

Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
06.05.2010, 22:07  [ТС]     Работа с файлами. #5
а можно вопрос, во втором, на место троеточий что подставлять? а то у меня ерунда выходит, может позже вылажу.

Добавлено через 5 часов 37 минут
Помощь ещё нужна...И функцию тяжеловато найти....(
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
07.05.2010, 01:09     Работа с файлами. #6
Цитата Сообщение от Bloodykeeper Посмотреть сообщение
а можно вопрос, во втором, на место троеточий что подставлять?
А вот, что!
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
#include <stdio.h>
#include <stdlib.h>
 
/*
*   Даны имена двух файлов вещественных чисел. Известно, что первый из них существует и является непустым, 
*   а второй в текущем каталоге отсутствует. Создать отсутствующий файл и записать в него начальный 
*   и конечный элементы существующего файла (в указанном порядке).
*/
    
#define FIN_NAME "in.txt"
#define FOUT_NAME "out.txt"
 
int main(void){
    FILE *fin, *fout;
    double val;
    
    if ( ( fin = fopen(FIN_NAME, "r") ) == NULL ){
        perror("fopen");
        exit(1);
    }
    if ( ( fout = fopen(FOUT_NAME, "w") ) == NULL ){
        perror("fopen");
        if ( fclose(fin) )
            perror("fclose");
        exit(1);
    }
    if ( fscanf(fin, "%lf", &val) != 1 ){
        perror("fscanf");
        if ( fclose(fin) )
            perror("fclose");
        if ( fclose(fout) )
            perror("fclose");
        exit(1);
    }
    if ( fprintf(fout, "%.1f\n", val) < 1 ){
        perror("fout");
        if ( fclose(fin) )
            perror("fclose");
        if ( fclose(fout) )
            perror("fclose");
        exit(1);
    }
    while ( fscanf(fin, "%lf", &val) == 1 )
        ;
    if ( ferror(fin) ){
        fprintf(stderr, "Can't read from file!\n");
        if ( fclose(fin) )
            perror("fclose");
        if ( fclose(fout) )
            perror("fclose");
        exit(1);
    }
    if ( fclose(fin) )
        perror("fclose");
    
    if ( fprintf(fout, "%.1f\n", val) < 1 ){
        perror("fprintf");  
        if ( fclose(fout) )
            perror("fclose");
        exit(1);
    }
    if ( fclose(fout) )
        perror("fclose");
    
    printf("Ales apgemaht!\n");
    exit(0);
}
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
07.05.2010, 08:20  [ТС]     Работа с файлами. #7
easybudda, блин почему же всё так запутано?? это какой-то ппц просто...подскажите пожалуйста, где на том сайте можно функции к третей задаче найти? А я вот думаю, а нельзя случаем взять ещё третий файл, и туда сначала записать содержимое первого, потом в первый записать содержимое второго, а во второй содержимое третего записать, и потом по возможности удалить третий файл.???
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
07.05.2010, 11:11     Работа с файлами. #8
Цитата Сообщение от Bloodykeeper Посмотреть сообщение
А я вот думаю, а нельзя случаем взять ещё третий файл, и туда сначала записать содержимое первого, потом в первый записать содержимое второго, а во второй содержимое третего записать, и потом по возможности удалить третий файл.???
Можно, по другому - то никак и не придумаешь
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
07.05.2010, 11:53     Работа с файлами. #9
Bloodykeeper, можно, конечно, и файл лишний раз скопировать... Особенно приятно так делать, когда файлы гига по 4 - сидишь, ждёшь, и с каждой минутой всё сильнее осознаёшь, что ждать пришлось бы гораздо меньше, если осмыслить довольно простую комбинацию. Допустим, есть:
/dir1/file1
/dir2/file2
перемещаешь файлы, чтобы было
/dir1/file2
/dir2/file1
переименовываешь file2 в file1 и наоборот, получаешь
/dir1/file1
/dir2/file2
только поменявшиеся содержанием. Сложно? Не думаю. При этом, если /dir1 и /dir2 находятся на одном диске в одном разделе, то фактически содержимое файлов вообще никуда перемещаться не будет.

Не по теме:

Кстати... Пожалуйста за второе задание!

Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
07.05.2010, 22:55  [ТС]     Работа с файлами. #10
А можете помочь с переименовыванием и перемещением...просто я реально дуб-дерево в работе с файлами, всё никак не могу вкурить эту тему. Хочу хоть шаблончиков раздобыть. Просто в книгах пишут только сами функции и всё, ни примеров вам, НиЧеГо.( особенно для меня тяжело понять, когда начинать именно писать саму операцию в файле, а не над ним.(

Добавлено через 6 часов 54 минуты
Помощь ещё нужна.
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
08.05.2010, 23:12  [ТС]     Работа с файлами. #11
Задача ещё не решена.
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
13.05.2010, 08:59  [ТС]     Работа с файлами. #12
Пожалуйста подскажите функции как переименовать файл и как его переместить, не могу найти. Заранее спасибо.

Добавлено через 3 часа 43 минуты
Ну помогите кто-нить, пожалуйста.

Добавлено через 12 часов 2 минуты
.......
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.05.2010, 09:23     Работа с файлами. #13
Bloodykeeper, минуту искал, не больше! http://msdn.microsoft.com/ru-ru/libr...8VS.90%29.aspx
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
13.05.2010, 09:43  [ТС]     Работа с файлами. #14
easybudda, а не подскажете функцию для перемещения файлов??
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.05.2010, 10:08     Работа с файлами. #15
Цитата Сообщение от Bloodykeeper Посмотреть сообщение
а не подскажете функцию для перемещения файлов?
Ещё одну?! О_о
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
 
#define D1 "dir1"
#define D2 "dir2"
#define F1 "file1.txt"
#define F2 "file2.txt"
 
int main(void){
    if ( rename(D1 "\\" F1, D2 "\\" F1) ){
        perror("rename");
        exit(1);
    }
    if ( rename(D2 "\\" F2, D1 "\\" F1) ){
        perror("rename");
        exit(1);
    }
    if ( rename(D2 "\\" F1, D2 "\\" F2) ){
        perror("rename");
        exit(1);
    }
    exit(0);
}
папки с файлами только создать не забудьте.
Работа с файлами.
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
13.05.2010, 23:42  [ТС]     Работа с файлами. #16
Не знаю что такое, в общем не работает она, у меня по крайней мере, пишет
Rename: Invalid argument
Кароче походу я инвалид...
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
#include <stdio.h>
#include <stdlib.h>
//
//Даны два файла произвольного типа. Поменять местами их содержимое.
//
 
#define D1 "P:\\1AiP\\Task 5\\6\\dir1"
#define D2 "P:\\1AiP\\Task 5\\6\\dir2"
#define F1 "P:\\1AiP\\Task 5\\6\\dir1\\file1.txt"
#define F2 "P:\\1AiP\\Task 5\\6\\dir2\\file2.txt"
 
int main(void){
        if ( rename(D1 "\\" F1, D2 "\\" F1) ){
                perror("rename");
                exit(1);
        }
        if ( rename(D2 "\\" F2, D1 "\\" F1) ){
                perror("rename");
                exit(1);
        }
        if ( rename(D2 "\\" F1, D2 "\\" F2) ){
                perror("rename");
                exit(1);
        }
        exit(0);
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
14.05.2010, 00:16     Работа с файлами. #17
Bloodykeeper, точно уверены, что хотите на программиста учиться?
C
1
2
3
4
5
6
...
#define D1 "P:\\1AiP\\Task 5\\6\\dir1"
#define D2 "P:\\1AiP\\Task 5\\6\\dir2"
#define F1 "file1.txt"
#define F2 "file2.txt"
...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2010, 14:20     Работа с файлами.
Еще ссылки по теме:

C++ Работа с файлами
C++ Работа с файлами
Работа с файлами C++

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

Или воспользуйтесь поиском по форуму:
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
14.05.2010, 14:20  [ТС]     Работа с файлами. #18
точно) наука то не простая, а нужная) да я и не совсем на программиста. "Автоматизация производственных процессов". Тут всё в куче. А преподаватели знают наверное меньше меня...и как так быть? где же это правильное "Европейское образование", когда я у двоих преподов спрашивал в чём ошибка, а оказалость файл не нужно было полностью объявлять...кароче фигня а не учёба. А самому читать что-то времени не хватает...
Yandex
Объявления
14.05.2010, 14:20     Работа с файлами.
Закрытая тема Создать тему
Опции темы

Текущее время: 13:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru