我已经实现了一个带有组合框的文件选择器。我想将选定的文件名写入日志。问题是,当我从原始目录中选择一个文件时它很顺利但是当我从另一个目录中选择一个文件时它将无法工作。任何人都可以帮忙吗?这是文件选择器的代码,它在一个对话框中。
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;
}
这是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);
}
最后这就是我将文件名写入文件的地方。
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);
}
}
提前致谢。
答案 0 :(得分:0)
文件未打开的问题是什么?如果是这样,我怀疑文件选择对话框正在更改当前目录,因此新目录不包含名为“conf”的目录。
您可以尝试为conf \ Baterias.conf指定绝对路径,以确认这是问题所在。
答案 1 :(得分:0)
来自DlgDirListComboBox
的{{3}}:
如果lpPathSpec指定目录, DlgDirListComboBox更改当前 目录到指定目录 在填充组合框之前。文本 由...识别的静态控制 nIDStaticPath参数设置为 新当前目录的名称。
您可能希望在调用GetCurrentDirectory
之前缓存当前目录(DlgDirSelectComboBoxEx
),然后在返回后将其设置回来。或者,不要使用相对目录调用fopen
。