2013-10-04 3 views
0

Я использую формат CSV-файла для цели назад, я должен часто обновлять CSV-файл, поэтому я использовал для открытия status.csv файл в режиме r+. Проблема в том, что я не мог закрыть этот CSV, если i do, он переходит к обработке исключительных ситуаций. Если я оставлю его открытым, он занимает память кучи, что приводит к множеству проблем.Обработка файлов в pic32

FSFILE *tp; 
    enrowbuf=atoi(httemp); 
    FSchdir("\\"); 
    FSchdir("WWW"); 
    FSchdir("DBMS"); 
    tp = FSfopen("Status.csv","r+"); 
    if(tp!=NULL) 
     { 
     if(enrowbuf==1) 
      { 
      FSfseek(tp,(43*enrowbuf),SEEK_SET); 
      } 
     else 
      { 
      FSfseek(tp,(42*enrowbuf),SEEK_SET); 
      FSfwrite(&Relay4,48,1,tp); 
      } 
     FSfclose(tp); 
     } 
+0

В документах для FSfwrite есть раздел «Условие», в котором говорится: «Файл открывается в режиме записи (w) или append (a)». Итак, хотя 'r +' обычно ассоциируется с чтением/записью, возможно, эта библиотека заставляет вас открываться в режиме 'a' или' w'? –

+0

@AustinPhillips: Можете ли вы дать URL-адрес, чтобы поддержать ваше утверждение о том, что файл должен быть открыт для режима записи или добавления, и что режим чтения/обновления не разрешен. Вероятно, будут проблемы с выходом, если вы переходите к интерполяции записей переменной длины в середине файла, но если 'FSfwrite()' является точным аналогом 'fwrite()', тогда он должен писать в середине файл. Поскольку я не совсем понимаю, что имеет значение префикса FS, я могу лаять неправильное дерево, но тогда я ожидаю найти, что режим 'a' или' a + 'имеет смысл (и простой' w' или 'w +' не сделал). –

+0

@JonathanLeffler Моя ссылка была http://ww1.microchip.com/downloads/en/AppNotes/01045a.pdf, p22 - Я предполагаю, что это библиотека, о которой идет речь в вопросе, но я могу ошибаться. К сожалению, мой опыт заключается в том, что эти типы встроенных системных библиотек печально известны как нестандартные и срезанные углы в реализации из-за ограничений ресурсов. –

ответ

1

я попытался это и его работает отлично, я открыл файл в режиме добавления a. Память кучи очищается, закрывая файл должным образом.

FSFILE *tp; 
    enrowbuf=atoi(httemp); 
    FSchdir("\\"); 
    FSchdir("WWW"); 
    FSchdir("DBMS"); 
    tp = FSfopen("Status.csv","a"); 
    if(tp!=NULL) 
     { 
     if(enrowbuf==1) 
      { 
      FSfseek(tp,(43*enrowbuf),SEEK_SET); 
      } 
     else 
      { 
      FSfseek(tp,(42*enrowbuf),SEEK_SET); 
      FSfwrite(&Relay4,48,1,tp); 
      } 
     FSfclose(tp); 
     }