Я использую формат 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);
}
В документах для FSfwrite есть раздел «Условие», в котором говорится: «Файл открывается в режиме записи (w) или append (a)». Итак, хотя 'r +' обычно ассоциируется с чтением/записью, возможно, эта библиотека заставляет вас открываться в режиме 'a' или' w'? –
@AustinPhillips: Можете ли вы дать URL-адрес, чтобы поддержать ваше утверждение о том, что файл должен быть открыт для режима записи или добавления, и что режим чтения/обновления не разрешен. Вероятно, будут проблемы с выходом, если вы переходите к интерполяции записей переменной длины в середине файла, но если 'FSfwrite()' является точным аналогом 'fwrite()', тогда он должен писать в середине файл. Поскольку я не совсем понимаю, что имеет значение префикса FS, я могу лаять неправильное дерево, но тогда я ожидаю найти, что режим 'a' или' a + 'имеет смысл (и простой' w' или 'w +' не сделал). –
@JonathanLeffler Моя ссылка была http://ww1.microchip.com/downloads/en/AppNotes/01045a.pdf, p22 - Я предполагаю, что это библиотека, о которой идет речь в вопросе, но я могу ошибаться. К сожалению, мой опыт заключается в том, что эти типы встроенных системных библиотек печально известны как нестандартные и срезанные углы в реализации из-за ограничений ресурсов. –