Есть лог message.log...
В него через Append добавляются пронумерованные новые строчки сообщений...При необходимости эти строчки считываются по порядку, начиная с первой.
Задача состоит в том, чтобы прочитанную строчку удалить так, чтобы на ее месте ничего не осталось, т.е чтобы все последующие сместились на место удаляемой (на одну позицию)...
Можно конечно заменить необходимую строку vbNullString, но вот, к примеру 1000 nullString, размещеные в столбец (в каждой строке) весят порядка 1.95 kb....а сообщений предполагается очень большое количетво.
После удаления строчки можно конечно переписывать все последующие на ону позицию вверх...Можно ли обойтись без этого, чтобы цикл обработки удалением прочитанного сообщения?
[После удаления строчки можно конечно переписывать все последующие на ону позицию вверх...Можно ли обойтись без этого, чтобы цикл обработки закончить удалением прочитанного сообщения?]
>>> GOG
Круто!!!!Видимо не понята суть вопроса...
Ето все конечно класс, что ты знаешь основные операторы работы с текстовыми файлами (я их тоже знаю), но задача вот в чем (дело принципа):
Запиши в файл строчку, например "GOG"
Запиши после еще пару тысяч "GOG"
Теперь попробуй сделать так, чтобы в этом файле было записано в первой строке "GG", да так чтобы не переписывать этот файл заново...СЛАБО! Сделаешь - меня научи ))
Фишка troble заключается в том, что можно открыть этот файл For Binary, узнать номер конкретной буквы, и даже попытаться стереть ее...(там вроде константа есть vbBack, которая передает код Backspace)...можно на месте етого символа записать vbNullChar...Итог всего етого один - на месте выбранного char остается какой-то символ, полагаю что ето vbNullChar или chr(0).....Короче символ из строчки без последствий, чтобы после него ничего не осталось, не удалишь....
Я бы посоветовал автору работать с его ЛОГ-файлом, как с INI-файлом, записывая в него данные через WritePrivateProfileString и считывая - через ReadPrivateProfileString. Это очень простые в использовании АПИшки. Удаление целой N-й строчки будет выглядеть так:
Здесь iniFile - полное имя ЛОГ-файла; "LogRecords" - имя секции, которую неизбежно придётся создать; а строчки внутри этой секции (собссно записи лога) типа имеют следующий вид:
Record1, Record2, ..., Record125, ...
При удалении данным способом файл "схлопнется" на месте удалённой строки.
И ещё - в MSDN написано, что если вы произвели запись новых данных в INI-файл с помощью WritePrivateProfileString, а потом начали их читать оттуда (с помощью ReadPrivateProfileString), то вы можете увидеть неприятный эффект, что считываются-то СТАРЫЕ данные! как будто никакой записи новых данных перед этим и не было. Я как-то на такие грабли наступил... Однако, в MSDN есть и объяснение этого эффекта (кэширование файла), и рецепт, как этот эффект нейтрализовать: перед чтением из файла нужно сделать вот такой вызов: