Перезапись файла

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by sl1k, 22 Mar 2012.

  1. sl1k

    sl1k Member

    Joined:
    31 Jul 2009
    Messages:
    106
    Likes Received:
    26
    Reputations:
    5
    Вроде стандартные строчки (прост читаем побайтово и записываем в другой фал) но столкнулся с проблемой
    в исходящем файле на 1 байт больше - последний байт входящего файла в исходящем дублируется.
    Как исправить ?

    PHP:
    while(!feof(in))
        {
            
    fread(&t,sizeof(char),1,in); i++;
            
    fwrite(&t,sizeof(char),1,out);
            }
     
  2. pr_loader

    pr_loader New Member

    Joined:
    6 Jun 2011
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    давно такими делами не занимался, но мне кажется как вариант можно попробовать в условии не feof, а кол-во байт в этом файле.
    и типо того
    int count_in=колво байт в файле;
    int i=0;
    (while i!=count_in)//как то наподобие
    {
    ...
    i++;
    }
     
    #2 pr_loader, 22 Mar 2012
    Last edited: 22 Mar 2012
  3. sl1k

    sl1k Member

    Joined:
    31 Jul 2009
    Messages:
    106
    Likes Received:
    26
    Reputations:
    5
    Поставил
    PHP:
    while(i<=filelength(fileno(in)))
    все равно последний байт дублируется
     
  4. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    Убери знак ровно. В сях отсчёт начинается с 0, то есть от нуля и до размер_файла-1
     
  5. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    Функция feof() возвращает true только после того, как функция fread() прочитала 0 байт. То есть твой цикл должен выглядеть приблизительно так:
    Code:
    fread(&t,sizeof(char),1,in);
    while(!feof(in))
    {
      i++;
      fwrite(&t,sizeof(char),1,out); 
      fread(&t,sizeof(char),1,in);
    }