[질문]파일의 특정위치 문자 읽어오기

gostop의 이미지

서버에서 버젼정보 파일을 받아와서 새버젼이면 업데이트를 수행하는 프로그램을 만들고 있습니다.

버젼정보 파일은 다음처럼 아주 간단하게 되어있습니다.(버젼 <tab구분> 버전)
1<Tab>1

업데이트 프로그램에서 버젼을 읽어와서 검사하는 루틴은 다음과 같습니다.

hFile=CreateFile("version.ini", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile!=INVALID_HANDLE_VALUE) {
   ReadFile(hFile, ncver, 1, &dwRead, NULL);
   SetFilePointer(hFile, 2, 0, FILE_BEGIN);
   ReadFile(hFile, nupver, 1, &dwRead, NULL);
   CloseHandle(hFile);
}

if(atoi(ncver)<atoi(ocver)) {
업데이트 수행....

근데 ncver와 nupver배열에 1과 1이 들어있을줄 알았는데 전혀 이상한게 들어있습니다(H와 @가 들어가있네요.. :?: )

제가 뭘 잘못 알고 있는 걸까요?

혹은 이런 비슷한 프로그램 작성시 제가 만든 코드말구 더 좋은 방법 없을까요?

원래는 version.ini에 문자열을 더 넣을려고 했는데 파일에서 특정위치 문자를 읽어오는걸 잘 몰라서 위처럼 간단하게 했습니다. :oops:

sozu의 이미지

gostop wrote:
버젼정보 파일은 다음처럼 아주 간단하게 되어있습니다.(버젼 <tab구분> 버전)
1<Tab>1

ReadFile은 Binary 형태의 파일을 읽을때 주로 사용합니다.

즉 위와 같이 Text 형태로 되어있다면 이렇게 하는게 편합니다.

int ncver, nupver;
FILE *pFile = fopen("....", "rt");
fscanf(pFile, "%d %d", &ncver, &nupver);

-----------
청하가 제안하는 소프트웨어 엔지니어로써 재미있게 사는 법
http://sozu.tistory.com

charsyam의 이미지

흐음, 뭔가 실수하신건 아닌지.

SetFilePointer 로 옮기고, ReadFile 로 읽으면 됩니다.

고운 하루되시길..

=========================
CharSyam ^^ --- 고운 하루
=========================

gostop의 이미지

여기저기 알아보고 다음과 같이 바꿨습니다.
그래도 여전히 안되네요.. :twisted:

NewUpdate.ini의 내용은 다음과 같고 . 프로그램이 실행되는 컴퓨터의 OldUpdate.ini도 같은 구조로 되있습니다.
[Client]
Version=1

[Update]
Version=1

이 파일을 가져와서 새버전인지 비교하는 루틴은 다음과 같습니다.

GetWindowsDirectory(upini, sizeof(upini));
 strcat(upini, "\\NewUpdate.ini");
do {
     cnt++;
     if((fp=fopen(upini, "r"))!=NULL) {
         fclose(fp);
         break;
     }
while(cnt<10);
 
ncver=GetPrivateProfileInt("Client", "Version", 0, upini);
nupver=GetPrivateProfileInt("Update", "Version", 0, upini);
 
if(cver<ncver) {
 업데이트....
 
if(upver<nupver) {
 업데이트....

근데 서버에서 받아온 update.ini 파일을 열어보면 버전이 1로 되있는데 GetPrivateProfileInt()로 얻어온 버전값을 보면 0으로 되있습니다.
그래서 혹시 서버에서 받아오는데 느려서(실제론 1초정도 밖에 안걸립니다.) GetPrivateProfileInt()에서 버전값을 알아올때 update.ini파일을 아직 다운받기 전이여서 디폴트값이 들어가지 않았나 싶어서 위처럼 do..while()을 넣줬습니다.

이거때문에 3일동안 삽질만 하고있네요..
도데체 뭐가 문제일까요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.