PDA

Показать полную графическую версию : Работа с файлами


ramo
09-04-2007, 23:37
Кто-нибудь помогите разобраться с файлами. Нужно найти определенную строку и после или перед ним добавить, например "090".
Что-то нашкрябал, не работает. Почему-то добавляет в конец файла. И значение t1(см. код) в другой форме выводиться.
Еще один вопрос как с помощью stat посматреть размер файла.
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <math.h>

main()
{
int fd;
char inf[4]="090";
char buffer[BUFSIZ];
int t1,t2;
ssize_t rcount,wcount;

fd=open("ftr",O_RDWR);
i=0;
rcount=read(fd,buffer,BUFSIZ);
printf("rcount: ");
printf("%d",rcount);
t1=lseek(fd,'Y',SEEK_SET);
printf(" lseek: ");
printf("%d",t1);
wcount=write(fd,inf,16);
close(fd);
printf(" ");
}

BuGfiX
10-04-2007, 10:27
Что-то я не понимаю.. Вижу что Вы читаете из файла строку, длиной = BUFSIZ, но где вы сверяете ее с "определенной строкой, после которой надо вставить 090" - не вижу. Так же непонятно что такое i=0 (точнее зачем оно надо), ну и параметр 'Y' в функции lseek имхо никак не связан с поиском....

ramo
13-04-2007, 10:57
BuGfiX я не очень понимаю в прогр. в *.nix, так что извини если что -то не то.
i-она совсем не нужно(забыл убрать).
Я так пинимаю эту задачку:
открываем файл, считываем с файла данные размером BUFSIZ в переменную buffer. потом находим указатель или место где стоит символ
'Y'. и в это место записываем inf(на место указывает t1).
Подправь пожалуйста, если я что-то не так делаю.

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <math.h>

main()
{
int fd;
char inf[4]="090";
char buffer[BUFSIZ];
int t1,t2;
ssize_t rcount,wcount;

fd=open("ftr",O_RDWR);
rcount=read(fd,buffer,BUFSIZ);
printf("rcount: ");
printf("%d",rcount);
t1=lseek(fd,'Y',SEEK_SET);
printf(" lseek: ");
printf("%d",t1);
wcount=write(fd,inf,t1);
close(fd);
}

BuGfiX
13-04-2007, 12:04
Чтож.. давайте разберемся.
я не очень понимаю в прогр. в *.nix
С точки зрения алгоритмов программирования, *nix ничем не отличается от win.
открываем файл, считываем с файла данные размером BUFSIZ в переменную buffer. потом находим указатель или место где стоит символ
'Y'. и в это место записываем inf(на место указывает t1).
Символ 'Y' Вам нужно искать в файле, со смещения размером BUFSIZ и до конца, или в содержимом переменной buffer ?
на место указывает t1
t1=lseek(fd,'Y',SEEK_SET);
Функция lseek не делает поиск! Она выполняет установку указателя в файле по смещению, заданому 2-м аргументом, и в Вашем случае это смещение = 'Y' = 89 байтам от начала файла.

ramo
23-04-2007, 10:33
BuGfiX спасибо, твое сообщение насчет операторов помогло.
Задачку решил другим способом. Вначале я думал, сделать все это прямо в файле. Этого не удалось. Вообщем содержимое файла загоняем в переменную. Эту переменную модифицируем, а потом перезаписываем файл.
Еще вопрос: при объявлении типа <string s1> выводит ошибку, хотя указываю заговочный файл <string.h>. Может какие-то дополнения нужны. В учебнике насчет этого ниче не написано.

BuGfiX
23-04-2007, 12:33
В С строки объявляются как "последовательность байтов(символов), заершающихся нулем", или указатель на нее, например:

char *s1="string1";
char *s2;




© OSzone.net 2001-2012