Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Замена слова в rc файле


Автор: maximpm 22.11.2011, 02:27
Добрый день!
Пытаюсь написать программу (проект 2), которая позволит локализировать другую программу (проект 1) с помощью изменения текста в rc файле.
Например, есть проект 1, в котором в rc файле прописано:

Код

MENUITEM "&Альфа",                IDM_ALPHA


Необходимо поменять эту строку на 

Код

MENUITEM "&Alpha",                IDM_ALPHA


И, соответственно, в меню программы (проекта 1) после повторной компиляции кнопка "Альфа" станет кнопкой Alpha

А теперь суть проблемы. Я написал программу, которая делает это действие почти со всеми типами файлов (даже с rc, правда созданным вручную в Notepad).


Код

#include <stdio.h>
#include <string.h>
#include <windows.h>
#define MAX_LEN_SINGLE_LINE     120        

FILE *fp;
FILE *fg;

#pragma endregion
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
         
                 char buffer[MAX_LEN_SINGLE_LINE+2];
                 char *buff_ptr, *find_ptr;
                
         const char text2find[80] = "&Альфа";
                 const char text2repl[80] = "&Alpha";
            

                 fp=fopen("D:\\Documents\\Visual Studio 2010\\Projects\\211111\\211111\\1.rc","r"); 
                 fg=fopen("D:\\Documents\\Visual Studio 2010\\Projects\\211111\\211111\\1_new.rc","w");
             size_t find_len = strlen(text2find);
            
 while(fgets(buffer,MAX_LEN_SINGLE_LINE+2,fp))
    {
       buff_ptr = buffer;
       while ((find_ptr = strstr(buff_ptr,text2find)))
        {
            while(buff_ptr < find_ptr)                
                
            fputc((int)*buff_ptr++,fg);
 
            fputs(text2repl,fg);
 
            buff_ptr += find_len;
        }
        fputs(buff_ptr,fg);
    }
 
    fclose(fg);
    fclose(fp);

             }
    };
}



Дело в том, что после запуска этой программы в новом файле появляются какие-то иероглифы (причём только если запускаем её для откомпилированного rc файла, в остальных случаях работает исправно)

Я так понимаю, дело в кодировке rc файла. Как же его тогда правильно считать?

Автор: bsa 22.11.2011, 10:16
А причем тут С++?

Добавлено через 1 минуту и 53 секунды
maximpm, тебе надо открывать файл в двоичном режиме (второй параметр должен быть "rb" и "wb" в функциях fopen), а не в текстовом. Думаю, основная проблема в этом.

Автор: maximpm 22.11.2011, 10:35
Только что сделал так, как вы посоветовали. К сожалению, не помогло  smile 

Автор: maximpm 22.11.2011, 11:05
Ну, что-то вроде выхода из сложившейся ситуации я нашёл.
Я просто через Notepad++ поменял кодировку rc файла на ANSI
После этого всё работает прекрасно!
Но теперь вопрос, а можно ли это как-нибудь сделать без ручного вмешательства в кодировку rc файла?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)