Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена слова в rc файле, Маленькая гадость, которая всё портит 
V
    Опции темы
maximpm
  Дата 22.11.2011, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 22.11.2011
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Добрый день!
Пытаюсь написать программу (проект 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 файла. Как же его тогда правильно считать?
PM MAIL   Вверх
bsa
Дата 22.11.2011, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



А причем тут С++?

Добавлено через 1 минуту и 53 секунды
maximpm, тебе надо открывать файл в двоичном режиме (второй параметр должен быть "rb" и "wb" в функциях fopen), а не в текстовом. Думаю, основная проблема в этом.
PM   Вверх
maximpm
Дата 22.11.2011, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 22.11.2011
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Только что сделал так, как вы посоветовали. К сожалению, не помогло  smile 
PM MAIL   Вверх
maximpm
Дата 22.11.2011, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 22.11.2011
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Ну, что-то вроде выхода из сложившейся ситуации я нашёл.
Я просто через Notepad++ поменял кодировку rc файла на ANSI
После этого всё работает прекрасно!
Но теперь вопрос, а можно ли это как-нибудь сделать без ручного вмешательства в кодировку rc файла?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0418 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.