[제품종류] IEC1000Lite
[개발환경] Visual Studio 2008 C#
=============== 질 문 ===============smartFile.Open();
if (smartFile.GetStringLineCount() != 33) ----> 0개가 아닌 유효한 스트링이 있는 경우 갯수를 잘못 읽어 옴.
{
for (i = 0; i < 33; i++)
{
smartFile.WriteString_Begin(0.ToString(), i);
}
TEMPstring = 1.ToString();
smartFile.WriteString_Begin(TEMPstring, 9);
smartFile.WriteString_Begin(TEMPstring, 10);
smartFile.WriteString_Begin(TEMPstring, 25);
smartFile.WriteString_Begin(TEMPstring, 26);
smartFile.WriteString_End();
}
smartFile.ReadStringFillBuffer(); //---> 스트링 갯 수를 잘못 읽어 오니 일정 데이터 이후는 없는 것으로 판단 함.
TEMPstring = 90000.ToString();
smartFile.WriteString_Begin(TEMPstring, 0);
smartFile.WriteString_Begin(TEMPstring, 1);
smartFile.WriteString_Begin(TEMPstring, 2);
smartFile.WriteString_Begin(TEMPstring, 3);
smartFile.WriteString_Begin(TEMPstring, 16);
smartFile.WriteString_Begin(TEMPstring, 17);
smartFile.WriteString_Begin(TEMPstring, 18);
smartFile.WriteString_Begin(TEMPstring, 19);
smartFile.WriteString_End(); //---> 실제보다 적은 스트링 갯수릐 데이터를 저장
smartFile.Close();
위의 예제를 실행하면 33개의 스트링이 저장 되어야 하는데, 처음 만들어 질 때는 33개를 만드는데 나중에
GetStringLineCount()에서 잘못 읽어 오고
그와 연관 되어 ReadStringFillBuffer(); 에서도 갯수를 잘못 읽어 와서 결론적으로 데이터가 적게 저장 되는 것 같습니다.
위와 같이 분석 됩니다.
확인 부탁 드립니다.
=============== 답 변 ===============
안녕하세요.
올려주신 코드를 사용하여 디버깅하며 확인해본 결과 처음 데이터를 쓰기했을 때 33개의 데이터가 말씀하신대로 정상적으로 쓰여지는 것을 확인했으며, 이후 해당 코드를 한번 더 실행했을 때 smartFile.GetStringLineCount() 메소드가 33으로 정상적으로 문자열의 Line 개수가 33개가 맞게 출력되는 것 또한 확인하였으며, if 문의 조건으로 인해 내부 코드를 실행하지 않고 넘어가는 것까지 확인하였습니다.
이후 코드에서 다음과 같은 문제점이 보여 순차적으로 설명 드리겠습니다.
1. ReadStringFillBuffer() 메소드를 사용하신 이유가 Write 계열 버퍼에 File에 있는 데이터를 읽어오기 위해 사용하신 것으로 짐작됩니다.
2. 하지만 SmartFile의 일괄처리 읽기(ReadStringFillBuffer)/쓰기(WriteString_Begin, _End) 버퍼의 경우 분리되어 있습니다.
(해당 내용은 3.2.4(Old), 5.0.0.3(New) 모두 해당되는 내용입니다.)
3. 그렇기 때문에 File에 쓰여진 문자열 데이터를 변경하거나 추가하기 위해서는 ReadStringFillBuffer 메소드가 아닌 WriteString_BeginBufferFill 메소드를 사용하셔야 합니다.
smartFile.ReadStringFillBuffer() 메소드 자리에 smartFile.WriteString_BeginBufferFill() 메소드로 변경 후 테스트했을 때 정상적으로 33개의 데이터가 계속해서 저장되는 것을 확인하였습니다.
감사합니다.