Frage

Ich habe eine Dateiauswahl mit einer Combobox umgesetzt. Ich mag die ausgewählten Dateinamen in ein Protokoll schreiben. Das Problem ist, dass, wenn ich eine Datei aus dem ursprünglichen Verzeichnis wählen geht es gut, aber wenn ich eine Datei aus einem anderen Verzeichnis wähle, wird es nicht funktionieren. Kann jemand helfen, mit dieser? Hier ist der Code für die Dateiauswahl, es befindet sich in einem Dialog.

BOOL CALLBACK BateriaFaxDlg(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam){

char descripcion[100]="";

char archivo[100]="";   
char cad[100];

int i,l;

switch (msg)               

    {
        case WM_INITDIALOG:
            InitCombo(hDlg, "*.*");         
            return TRUE;
            break;
        case WM_COMMAND:
            switch(LOWORD(wParam)) {
                case IDOK:  

                    i = SendDlgItemMessage(hDlg, IDC_ARCH2, CB_GETCURSEL, 0, 0);
                    if(i >= 0) {
                        SendDlgItemMessage(hDlg, IDC_ARCH2, CB_GETLBTEXT, (WPARAM)i, (LPARAM)archivo);
                    }

                    if (!GetDlgItemText(hDlg, IDC_DESCBATER, descripcion , 100)) {
                        MessageBox(hDlg, "Ambos campos son obligatorios", "ERROR", MB_ICONEXCLAMATION | MB_OK); 
                        break;
                    }
                    actualizarBaterias(GetParent(hDlg), "FAX", archivo, descripcion);
                    EndDialog(hDlg, FALSE);
                break;
                case IDCANCEL:
                    EndDialog(hDlg, FALSE);
                    break;
                case IDC_ARCH2:
                    switch(HIWORD(wParam)) {
                        case CBN_CLOSEUP:
                        case CBN_KILLFOCUS:
                            if(DlgDirSelectComboBoxEx(hDlg, cad, 100, IDC_ARCH2)) {
                                strcat(cad, "*.*");
                                InitCombo(hDlg, cad);
                            }                       
                        break;
                    }
                break;          
                default:
                break;           
           return TRUE;
           }
    }


    return FALSE;
}

Dies ist InitCombo:

void IniciarCombo(HWND hwnd, char* p) {

   char path[100];

   strcpy(path, p);

   DlgDirListComboBox(
    hwnd,           
    path,          
    IDC_ARCH2,      
    ID_TITULO,      
    DDL_DIRECTORY | DDL_DRIVES
   );
   SendDlgItemMessage(hwnd, IDC_ARCH2, CB_SETCURSEL, 0, 1);
}

und schließlich das ist, wo ich die Dateinamen in eine Datei schreiben.

void actualizarBaterias(HWND hWnd, char *tipo, char *archivo, char *descripcion) {
    FILE *fp;
    HWND hctrl;
    int i;
    HFONT hfont;

    fp = fopen("conf\\Baterias.conf", "a" );
    if (fp) {
        MessageBox(hWnd, "Actuali","error", MB_ICONEXCLAMATION | MB_OK);                                     
        fprintf(fp, "\n%s %s %s", tipo, archivo, descripcion);
        fclose(fp);
    }
}

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Von der Dokumentation DlgDirListComboBox:

  

Wenn lpPathSpec ein Verzeichnis angibt,   DlgDirListComboBox ändert die aktuelle   Verzeichnis in das angegebene Verzeichnis   bevor das Kombinationsfeld zu füllen. Der Text   der statischen Kontrolle identifiziert durch   die nIDStaticPath Parameter auf   der Name des neuen aktuellen Verzeichnis.

Sie haben wahrscheinlich das aktuelle Verzeichnis (GetCurrentDirectory) vor dem Aufruf DlgDirSelectComboBoxEx gecached werden sollen, dann setzen Sie es zurück, nachdem er zurückkehrt. Oder rufen Sie nicht mit einem relativen Verzeichnis fopen.

Andere Tipps

Ist das Problem, dass die Datei zu öffnen oder nicht? Wenn ja, würde ich vermuten, dass das aktuelle Verzeichnis wird durch den Dateiauswahldialog geändert werden, und so wird das neue Verzeichnis einer nicht „conf“ genannt enthält.

Sie könnten versuchen, einen absoluten Pfad für conf \ Baterias.conf Angabe zu bestätigen, dass dies das Problem ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top