Программирование на С - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь переключить содержимое 2 текстовых файлов, у них просто есть строки с символами.

Я пытался это сделать, программа компилируется, но ничего не изменяет в текстовых файлах.Есть ли другой способ сделать это?

FILE *f, *p;
char linha[TAM], linha2[TAM];

f =fopen("texto.txt", "r");

if(f==NULL)
{
    printf("Erro ao abrir ficheiro");
    fclose(f);
    return;
}

p =fopen("texto2.txt", "r");

if(p==NULL)
{
    printf("Erro ao abrir ficheiro");
    fclose(p);
    return;
}


while( fgets(linha,TAM,f) != NULL || fgets(linha2,TAM,p) != NULL )
{
    if(strcmp(linha, "") != 0)
    {
        fprintf(p, "%s", linha);
    }

    if(strcmp(linha2, "") != 0)
    {
        fprintf(f, "%s", linha2);
    }
}

fclose(f);
fclose(p);


return 0;

}

1 Ответ

0 голосов
/ 26 мая 2018

Как намекнул @PaulStelian, прямая замена проблематична.Возьмем в качестве аналогии обмен двух переменных: чтобы он работал, вы должны временно где-то хранить данные одной переменной.(Или используйте XOR-swapping, который приятен, но хакер и работает с двоичными данными.)

Лучше всего, вероятно, дублировать один файл, а затем выполнить обмен как

duplicateFile = copy(file1);
file1 = file2;
file2 = duplicateFile;

Для fopen используйте параметр r+, чтобы открыть файл для чтения и записи.r просто открывает его для чтения.

С man fopen:

r Открыть текстовый файл для чтения.Поток располагается в начале файла.

r+ Открыть для чтения и записи.Поток располагается в начале файла.

...