2013-03-27 3 views
0

nsis를 사용하여 exe 파일을 만들었습니다. 두 파일을 비교하기 위해 다음 코드를 사용했습니다. 일치하는 새 속성에 file.but 교체해야 모두 files.else 된 속성 값의 다음 단어로 이동하는 경우 문자열 불일치 교체하는 경우NSIS에서 두 파일을 비교하는 방법은 무엇입니까?

Function compare 
    IfFileExists "$INSTDIR\old.properties" 0 filenotfound 
    FileOpen $0 "$INSTDIR\old.properties" "r" 
    FileOpen $1 "$INSTDIR\new.properties" "w"      
    loop: 
     FileRead $0 $2   
     MessageBox MB_OK "old $2" 
     FileRead $1 $3 
     MessageBox MB_OK "new $3"     
     IfErrors done       
     strcmp $3 $2 loop here 
     here:         
      FileWrite $1 $2      
      Goto loop 
    done: 
     FileClose $0          
     FileClose $1 

    filenotfound: 
    MessageBox MB_OK "File not found" 
FunctionEnd 

이전 재산의 첫 번째 텍스트 읽기는 새 속성의 첫 번째 텍스트 비교 새 속성 파일의 문자열이 나타나지 않습니다. 어떻게 해결할 수 있습니까? 내가 뭘 잘못 했니?

답변

0

FileOpen $1 "$INSTDIR\new.properties" "w"은 new.properties의 모든 내용을 지우고 내용을 유지하려면 "a"을 사용하십시오.

"파일 비교"는 일반적으로 읽기 전용 작업을 의미하기 때문에 사용자가하려고하는 작업을 완전히 이해하지 못하고 있습니다. 글쓰기는하지만 특정 오래된 라인을 실제로 새로운 것으로 바꾸는 것 같지 않습니다. 다른 하나 ...

+0

고마워요. "a"는 append.i 대신 append.i 대신 값을 대체해야합니다. 문제는 사용자가 자동 ​​모드에서 두 번째로 실행하면 변경된 값 대신 기본값을 사용한다는 것입니다. 따라서 오래된 속성 값을 새로운 속성으로 비교하고 작성해야합니다. – Ami

+0

A는 추가 전용이 아니며 지우기가없는 W입니다 ... – Anders

+0

감사합니다.이 링크는 http://nsis.sourceforge.net/Replacing_Lines_in_a_Text_File을 참조했습니다. – Ami

관련 문제