Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Имя файла задаёт пользователь, как сделать чтобы... 
:(
    Опции темы
russians
Дата 7.4.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день, в Winapi  или просто в консоли вводится название карты, при создании делается прибавление строки, как сделать, чтобы было:
CHAR FILENAME
FOPEN(FILENAME,".reg","RW+") ? На выходе файл filename.reg с содержимым, которое формируется автоматически из вводимых же данных.
Есть предложения?

Это сообщение отредактировал(а) russians - 7.4.2008, 11:30
PM MAIL   Вверх
vinter
Дата 7.4.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



а теперь то же самое, только по русски.


--------------------
Мой блог
PM MAIL WWW   Вверх
russians
Дата 7.4.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



vinter, короч, проблема в том, что fopen принимает только const char, а надо, чтобы принимал динамически меняемую строку, то есть каждый запуск новое название файла... как сделать???
Вот fprintf имеет такой параметр:
Код

fprintf(fo, "\nLevels=2\nLevel0=15\nLevel1=13\nZoom0=7\nZoom1=8\nMapsourceName=", char CardName);

Помогите плиз smile

Это сообщение отредактировал(а) russians - 7.4.2008, 11:33
PM MAIL   Вверх
Alek86
Дата 7.4.2008, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

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



так передавай в fopen каждый раз новую строку smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
vinter
Дата 7.4.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



fopen принимает то что ему дадут smile так что можешь смело передавать указатель на строку полученнус с stdin


--------------------
Мой блог
PM MAIL WWW   Вверх
russians
Дата 7.4.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да понимаете в чём дело smile Тут ДВЕ строки, одна переменная а другая постоянная, с расширением файла. Вот как?
PM MAIL   Вверх
vinter
Дата 7.4.2008, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



Цитата(russians @  7.4.2008,  13:29 Найти цитируемый пост)
Да понимаете в чём дело  Тут ДВЕ строки, одна переменная а другая постоянная, с расширением файла. Вот как?

ну и что? так ты возьми которая необходима, и вставляй в фопен.. если не понимаешь, то приведи кусок кода что ты пытаешься сделать, и напиши что ты хочешь получить.


--------------------
Мой блог
PM MAIL WWW   Вверх
Alek86
Дата 7.4.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

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



russians, ты имеешь в виду, что у тебя одна "строка" имеет тип char* а вторая - const char*?
ничего страшного, char* можно вставлять в функции, что принимают const char* (так как существует неявное преобразование char* => const char*)


--------------------
user posted image    user posted image
PM MAIL   Вверх
Rififi
Дата 7.4.2008, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

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



russians, 

TCHAR szPath[_MAX_PATH+1];  // сюда ты вводишь путь к файлу
TCHAR szExtension[_MAX_EXT+1] // здесь сохраняется расширений файла

// добавляем расширение к пути
if (PathAddExtension(szPath, szExtension))
{
    fopen(szPath ...);
    ...
}

Это сообщение отредактировал(а) Rififi - 7.4.2008, 14:37
PM MAIL   Вверх
russians
Дата 8.4.2008, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

#include <windows.h>
#include <iostream>
#include "shlwapi.h"
#include <fstream>
#include <string.h>
using namespace std;

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
#define IDS_APP_TITLE               103
#define MAX_LOADSTRING             100
#define IDB_ACCEPT                 106
#define IDB_EDIT                   107
#define IDC_WINDOWBASIC            109

// Global Variables:
HINSTANCE hInst;                                // current instance

char szClassName[ ] = "WindowsApp";
HWND hWnd_Global;
HWND hWnd_Btn;
HWND hWnd_Edit;
HWND hWnd_Edit1;
HWND hWnd_Edit2;
HWND hWnd_Label;
HWND hWnd_Label1;
HWND hWnd_Label2;
WNDPROC wpOrigEditProc;

bool RegSetStringValue(HKEY Root, LPCTSTR SubKey, LPCTSTR Key, char *sValue)
{    
     HKEY hKey = 0;
     RegCreateKey(Root,SubKey,&hKey);
     bool hr = RegSetValueEx(hKey, Key, 0, REG_SZ, (LPBYTE) sValue, (DWORD)strlen(sValue)+1 )==ERROR_SUCCESS;
     RegCloseKey(hKey);
     return hr;
}
LRESULT CALLBACK EditWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    return CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam); 
}

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    //HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
   hWnd_Global = CreateWindow(szClassName, "cgpsmapper AUTOMAKE",  WS_OVERLAPPEDWINDOW,
                  0, 0, 800, 600, NULL, NULL, hThisInstance, NULL);
   hWnd_Btn = CreateWindow("BUTTON",                    // predefined class 
               "ACCEPT",                   // button text 
               WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,    // styles  
               // Size and position values are given explicitly, because 
               // the CW_USEDEFAULT constant gives zero values for buttons. 
               100,150,120,25,                // set size in WM_SIZE message 
               hWnd_Global,                    // parent window 
               NULL,                    // No menu 
               (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
               NULL);                    // pointer not needed 
   SetWindowLong(hWnd_Btn,GWL_ID,IDB_ACCEPT);
   hWnd_Edit = CreateWindow("EDIT",                    // predefined class 
                "GlobalMapDefault",                    // no window title 
                WS_CHILD | WS_VISIBLE | WS_BORDER | 
                ES_LEFT, 
                150, 15, 250, 25,                // set size in WM_SIZE message 
                hWnd_Global,                // parent window 
                NULL,                    // edit control ID 
                (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
                NULL);                    // pointer not needed
   
   hWnd_Label = CreateWindow("STATIC",                    // predefined class 
                "Íàçâàíèå êàðòû",                    // no window title 
                WS_CHILD | WS_VISIBLE |  
                ES_LEFT, 
                10, 15, 120, 25,                // set size in WM_SIZE message 
                hWnd_Global,                // parent window 
                NULL,                    // edit control ID 
                (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
                NULL);                    // pointer not needed
                
   hWnd_Edit1 = CreateWindow("EDIT",                    // predefined class 
                "0",                    // no window title 
                WS_CHILD | WS_VISIBLE | WS_BORDER | 
                ES_LEFT, 
                150, 55, 250, 25,                // set size in WM_SIZE message 
                hWnd_Global,                // parent window 
                NULL,                    // edit control ID 
                (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
                NULL);                    // pointer not needed
   
   hWnd_Label1 = CreateWindow("STATIC",                    // predefined class 
                "Product Code",                    // no window title 
                WS_CHILD | WS_VISIBLE |  
                ES_LEFT, 
                15, 55, 120, 25,                // set size in WM_SIZE message 
                hWnd_Global,                // parent window 
                NULL,                    // edit control ID 
                (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
                NULL);                    // pointer not needed
                
   hWnd_Edit2 = CreateWindow("EDIT",                    // predefined class 
                "Default.img",                    // no window title 
                WS_CHILD | WS_VISIBLE | WS_BORDER | 
                ES_LEFT, 
                150, 95, 250, 25,                // set size in WM_SIZE message 
                hWnd_Global,                // parent window 
                NULL,                    // edit control ID 
                (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
                NULL);                    // pointer not needed
   
   hWnd_Label2 = CreateWindow("STATIC",                    // predefined class 
                "File Name",                    // no window title 
                WS_CHILD | WS_VISIBLE |  
                ES_LEFT, 
                15, 95, 120, 25,                // set size in WM_SIZE message 
                hWnd_Global,                // parent window 
                NULL,                    // edit control ID 
                (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
                NULL);                    // pointer not needed
   
                
                               
   SetWindowLong(hWnd_Edit,GWL_ID,IDB_EDIT);
   wpOrigEditProc = (WNDPROC) SetWindowLong(hWnd_Edit,GWL_WNDPROC, (LONG) EditWndProc);
   
    /* Make the window visible on the screen */
    ShowWindow (hWnd_Global, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    switch (message) 
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam); 
        wmEvent = HIWORD(wParam); 
        // Parse the menu selections:
        if ((wmId==IDB_ACCEPT)&&(wmEvent == BN_CLICKED)) 
        {
            char CardName[250];
            char ProductCode[250];
            char FileName[250];
            char OutputFile[3000]="";
            char RegFile[3000]="";
            GetWindowText(hWnd_Edit,CardName,250);
            GetWindowText(hWnd_Edit1,ProductCode,250);
            GetWindowText(hWnd_Edit2,FileName,250);
            FILE * fo;
            fo = fopen("pv.txt","wt");
            fprintf(fo, "[Map]\nFileName=");
            fprintf(fo, CardName);
            fprintf(fo, "\nMapVersion=100\nProductCode=");
            fprintf(fo, ProductCode);
            fprintf(fo, "\nLevels=2\nLevel0=15\nLevel1=13\nZoom0=7\nZoom1=8\nMapsourceName=");
            fprintf(fo, CardName);
            fprintf(fo, "\nMapSetName=");
            fprintf(fo, CardName);
            fprintf(fo, "\nCDSetName=");
            fprintf(fo, CardName);
            fprintf(fo, "\nCopy1=Garmin\nCopy2=Garmin\n[End-Map]\n\n[Files]\nimg=");
            fprintf(fo, FileName);
            fprintf(fo,"\n[END-Files]");
      fclose(fo);
            cout << WinExec("cgpsmapper.exe pv pv.txt",SW_SHOW) << endl;
            char *pdest;
            char m_AppPath[MAX_PATH];
            GetModuleFileName(NULL,m_AppPath,MAX_PATH);
            pdest = strrchr(m_AppPath, '\\');
            *pdest = '\0';
            char szPath[_MAX_PATH+1];
            strcpy(szPath, CardName);
            char szExtension[_MAX_PATH+1];
            strcpy(szExtension, "reg");
            if (PathAddExtension(szPath, szExtension))
            {
            FILE * fo;
            fo = fopen(szPath,"wt+");
            fprintf(fo, "REGEDIT4\n");
            fprintf(fo, "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GARMIN\\MapSource\\Products\\");
            fprintf(fo, ProductCode);
            fprintf(fo, "]\n");
            
            fprintf(fo, "\"Bmap\"=");
            fprintf(fo, "\"", pdest);
            fprintf(fo, CardName);
            fprintf(fo, ".img");
            fprintf(fo, "\"\n");
            
            fprintf(fo, "\"Tdb\"=");
            fprintf(fo, "\"", pdest);
            fprintf(fo, CardName);
            fprintf(fo, ".tdb");
            fprintf(fo, "\"\n");
            
            fprintf(fo, "\"Loc\"=");
            fprintf(fo, "\"", pdest);
            fprintf(fo, "\"");
            fclose(fo);
            }
}
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: Add any drawing code here...
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;

}


На этапе Link выдаётся ошибка:
  [Linker error] undefined reference to `_imp__PathAddExtensionA@8' 
  ld returned 1 exit status 
 C:\Mapsoft\Makefile.win [Build Error]  [windows.exe] Error 1 

Что делать?
PM MAIL   Вверх
russians
Дата 9.4.2008, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

 char szPath[_MAX_PATH+1];
            strcpy(szPath, CardName);
            char szExtension[_MAX_PATH+1];
            strcpy(szExtension, "reg");
            if (PathAddExtension(szPath, szExtension))
            {
            FILE * fo;
            fo = fopen(szPath,"wt+");
            fprintf(fo, "REGEDIT4\n");
            fprintf(fo, "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GARMIN\\MapSource\\Products\\");
            fprintf(fo, ProductCode);
            fprintf(fo, "]\n");
            
            fprintf(fo, "\"Bmap\"=");
            fprintf(fo, "\"", pdest);
            fprintf(fo, CardName);
            fprintf(fo, ".img");
            fprintf(fo, "\"\n");
            
            fprintf(fo, "\"Tdb\"=");
            fprintf(fo, "\"", pdest);
            fprintf(fo, CardName);
            fprintf(fo, ".tdb");
            fprintf(fo, "\"\n");
            
            fprintf(fo, "\"Loc\"=");
            fprintf(fo, "\"", pdest);
            fprintf(fo, "\"");
            fclose(fo);
            }

Вот именно этот кусок в чём неверный?
PM MAIL   Вверх
Rififi
Дата 9.4.2008, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

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



Цитата(russians @  8.4.2008,  15:11 Найти цитируемый пост)
На этапе Link выдаётся ошибка:
  [Linker error] undefined reference to `_imp__PathAddExtensionA@8' 
  ld returned 1 exit status 
 C:\Mapsoft\Makefile.win [Build Error]  [windows.exe] Error 1 

в борьбе с этой ошибкой, и другими подобными очень помогает следующий алгоритм действий:

1. открыть в браузере www.google.com
2. набрать в поиске строку "PathAddExtension function"
3. перейти на страницу msdn с описанием
4. найти имя необходимой библиотеки импорта
5. подключить библиотеку к проекту

PM MAIL   Вверх
russians
Дата 9.4.2008, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Rififi, #include "shlwapi.h"
не оно? оно у меня в коде есть smile и не работает smile
PM MAIL   Вверх
math64
Дата 9.4.2008, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



А не проще ли будет:
Код

char szPath[_MAX_PATH+1];
strcpy(szPath, CardName);
strcat(szPath, ".reg");

PM   Вверх
opjox
Дата 9.4.2008, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(russians @  9.4.2008,  10:27 Найти цитируемый пост)
Rififi, #include "shlwapi.h"не оно?


Не оно. shlwapi.h – это только заголовочный файл, который также необходим, вам же еще необходима библиотека импорта shlwapi.lib

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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