Почему последняя строка текстового файла VB6, считываемая / записываемая в другой файл, печатается только частично? - PullRequest
2 голосов
/ 31 марта 2011

Я создаю несколько текстовых папок программно с помощью VB6, а затем объединяю их все вместе в один файл.

Я записываю текст в файлы, используя

Print #lngFileHandle, Text  

, поэтому должно бытьCR / LF даже после самой последней строки текста в каждом файле.

Затем я добавляю все эти «подфайлы» вместе в другой текстовый файл, который был открыт следующим образом:

Open strFileName For Append As #lngFileHandle

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

Последние несколько строк выглядят так в файле, который я читаю FROM:

            `<Name>` Referral for Service Home Delivered Meals`</Name>`  
            `<Name>` Referral for Service Adult Day Care/Health`</Name>`  
            `<Name>` Referral for Service Congregate Meals`</Name>`  

, но после чтения из этого файла и вывода в конечный файл они выглядят так:

            `<Name>` Referral for Service Home Delivered Meals`</Name>`
            `<Name>` Referral for Service Adult Day Care/Health`</Name>`
            `<Name>` Referral for Service Congr

Код, который я использую для чтения в этом конкретном «подфайле» и вывода его в конечный файл:

With mobjNewEntriesLog
  Do While Not .IsEOF
    strOutput = .ReadLine
    mobjMainLog.PrintLine strOutput
  Loop
End With

. Функция .IsEOF выглядит следующим образом:

Public Function IsEOF() As Boolean
  If blnOpened Then
    IsEOF = EOF(lngFileHandle)
  Else
    IsEOF = True
  End If
End Function

Для меня было бы больше смысла, если бы я не получил последнюю строчку в ALL, а получил только часть этого? - Я не понимаю.

Кто-нибудь видел что-нибудь, что заставляло бы последнюю строку печатать только частично в конечный файл?

TIA.

Ответы [ 2 ]

2 голосов
/ 31 марта 2011

Убедитесь, что вы закрываете свой файл, так как это может потребоваться для очистки любых данных, ожидающих записи.

1 голос
/ 31 марта 2011

Номера файлов VB6 не являются дескрипторами файлов, поэтому не называйте их так.Они являются индексами в таблице файловых дескрипторов во время выполнения, где хранятся фактический дескриптор, режим, длина буфера, буфер, средства отображения и т. Д.

Оператор Close не является синхронным, а является "отложенным завершениемmsgstr "это, возможно, сбрасывало все данные и обновляло указатель EOF файла к тому времени, как вы оборачиваетесь и пытаетесь прочитать его снова.Насколько я могу определить, это поведение является преднамеренным, возможно, из соображений производительности.

Оператор Reset может использоваться для принудительного закрытия всех открытых файлов, причем он является синхронным.Это не всегда практично, однако в вашем случае это может быть хорошо.Достаточно просто попробовать: добавьте Reset перед тем, как заново открыть любой из ваших файлов, чтобы объединить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...