Файл читать, писать в тот же файл? - PullRequest
6 голосов
/ 26 апреля 2011

Мне удалось открыть файл и прочитать при записи в другой файл с помощью var=fopen(file,"r") / "w", но даже при использовании r + или w + я не могу открыть файл и изменить его содержимое.

Представьте себе это:

int formatacao (char original[]){/*se a cadeia nao tiver escrita em maiusculas, esta funçao vai alteralas para tal*/
    int val1;
    FILE * original_open;

    original_open = fopen (original,"r+");

    if (original_open==0){
       printf ("ficheiro %c 1.",original);
    }


    while ((val1=fgetc(original_open))!=EOF){
          if (val1>='a'&&val1<='z'&&val1){
             fputc(val1-32,original_open);
          }
          else 
          fputc(val1,original_open);
    }

    fclose (original_open);
    return (0);
}

Код работает, без ошибок, без предупреждения, единственная проблема: он стирает содержимое файла, если я использую его следующим образом, НО это работает:

int main (){
    int val1,val2,nr=0;
    FILE* fp1;
    FILE* fp2;
    fp1=fopen ("DNAexample.txt","r");
    fp2=fopen ("DNAexample1.txt","w");
    if (fp1==0){
       printf ("EPIC FAIL no 1.\n");
    }
    while ((val1=fgetc(fp1))!=EOF){
          if (val1>='a'&&val1<='z'&&val1){
             fputc(val1-32,fp2);
          }
          else 
          fputc(val1,fp2);
    }


    fclose (fp1);
    fclose (fp2);
    return (0);
}

Безупречно! Как я могу открыть файл, прочитать символ за символом и решить, хочу ли я изменить символ или нет?

Ответы [ 3 ]

8 голосов
/ 26 апреля 2011

Вам нужно вмешаться в функцию позиционирования файла между выходом и вводом, если EOF не был найден на входе.

Это работает для меня:

#include <stdio.h>

int formatacao (char *original) {
  int val1;
  FILE *original_open;
  int write_at, read_at;

  original_open = fopen(original, "r+");
  if (original_open == 0) {
    printf("ficheiro %s\n", original);
  }
  write_at = read_at = 0;
  while ((val1 = fgetc(original_open)) != EOF) {
    read_at = ftell(original_open);
    fseek(original_open, write_at, SEEK_SET);
    if (('a' <= val1) && (val1 <= 'z')) {
      fputc(val1 - 32, original_open);
    } else {
      fputc(val1, original_open);
    }
    write_at = ftell(original_open);
    fseek(original_open, read_at, SEEK_SET);
  }
  fclose(original_open);
  return (0);
}

int main(void) {
  formatacao("5787867.txt");
  return 0;
}
1 голос
/ 26 апреля 2011

Откройте файл с опцией 'a +', чтобы добавить к нему файл:

fopen ("DNAexample.txt","a+");

w + сотрет ваш файл, если он существует, или создаст новый, если указанный не существует.+ откроет существующий файл, и вы сможете редактировать его.

Подробнее о файловых операциях вы можете прочитать здесь: http://www.functionx.com/cppbcb/cfileprocessing.htm

0 голосов
/ 26 апреля 2011

Открыть файл в режиме добавления

original_open = fopen (original,"a+");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...