char get[MAX_PATH];
LRESULT polozek=SendDlgItemMessage(hwnd,IDLBplaylist, LB_GETCOUNT, 0, 0);
ofstream foutp("timer2.dat");
for(int i=0;i<polozek;i++){
Item = SendDlgItemMessage(hwnd, IDLBplaylist, LB_GETTEXT, i, (LPARAM)(LPCTSTR) get);
foutp << get << "\n";
}foutp.close();
kdyz to zkompiluju, tak to nic nezapise do toho souboru, nevi nekdo prosim, cim to je?
Fórum › C / C++
Probel se zapisem do souboru
Tak ukaz cely kod vcetne otevreni souboru a dialogu.Chyba bude asi nekde tam (spatne navratove hodnoty?, spatny handle na soubor?).
OPENFILENAME ofn;
char szFileName[MAX_PATH] = "";
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = "*.mp3\0*.mp3\0*.wma\0*.wma\0*.wav\0*.wav\0";
ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST;
ofn.lpstrDefExt = "mp3";
if(GetOpenFileName(&ofn))
{
SendDlgItemMessage(hwnd,IDLBplaylist,LB_ADDSTRING,0,(LPARAM)(LPCTSTR) szFileName);
}
a když pak v úplně jiné f-ci zavolám
ofstream foutp;
foutp.open("t2.dat", ios::out);
foutp << "text" << endl;
foutp.close();
tak se nic nezapíše, pokud to udělám před výběrem souboru, všechno je OK...
1, pro sizeof bych pouzil nazev struktury OPENFILENAME a ne promenou ofn. Nejsem si tedka jisty, jestli to nuluje spravnou velikost.
2, Zkontroluj, jestli se ti nevytvoril soubor t2.dat ve slozce, odkud si vyberes ten zvukovy soubor pomoci te funkce GetOpenFileName. Ono totiz tahle funkce meni aktualni pracovani adresar programu. To znamena, ze kdyz spustis ten kod pro zapis do soubor t2.dat, tak se ten soubor vytvori ve slozce s exe. Pokud ale zavolas GetOpenFileName dialog a pak kod na zapis do souboru, tak se s velkou pravdepodobnosti vytvori soubor t2.dat ve slozce, kde byl vybran soubor k otevreni.
Jinak tady mas muj kod pro otevirani dialogu:
/**
* Zobrazi dialog pro otevreni souboru.
*
* \param lpFile out - uklada cestu souboru
* \param hwndOwner ktere okno ho otevrelo
* \param exedll - urcuje,jaky typ souboru se bude vybirat (true - exe, false - dll)
* \return pokud se vybere soubor,tak true,jinak false
*/
BOOL OpenDialog(LPTSTR lpFile, HWND hwndOwner,bool exedll)
{
OPENFILENAME ofn;
TCHAR chFile[_MAX_PATH];
lstrcpy(chFile, "");
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.lpstrFile = chFile;
ofn.hwndOwner = hwndOwner;
ofn.nMaxFile = sizeof(chFile);
if (exedll)
{
ofn.lpstrFilter = TEXT("Soubory (*.EXE)\0*.exe\0");
} else {
ofn.lpstrFilter = TEXT("Soubory (*.DLL)\0*.dll\0");
}
ofn.nFilterIndex = 1;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if ( !GetOpenFileName(&ofn) )
return FALSE;
lstrcpy(lpFile, chFile);
return TRUE;
}
A tento kod ti zjisti aktualni adresar, ve kterem se nachazi spustene exe:
/**
* Vraci cestu slozky se spustenym programem a k teto ceste pripoji vybrany soubor.
* \param fileName - Nazev souboru, ktery se pripoji k retezci.
* \return - Vraci cestu (aktualne spustene exe + fileName -> napr. C:\Temp\neco.dll pokud je app.exe ve slozce C:\Temp)
*/
char* GetFilePathInCurrentDirectory(char *fileName) {
TCHAR appPath[_MAX_PATH];
GetModuleFileName(NULL,appPath,_MAX_PATH);
std::string currentDir(appPath);
size_t i = currentDir.rfind("\\", strlen(appPath));
currentDir.resize(i + 1);
currentDir.append(fileName);
ZeroMemory(appPath,strlen(appPath));
strcpy(appPath,currentDir.c_str());
return appPath;
}
Nepotrebne veci snad zvladnes dat pryc a upravit si to tak,jak bude potreba.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Výpočet kvadr. rovnice se zápisem výsledku do souboru — založil Kranich
Problémy se zápisem do db — založil kropac
Problemy se zapisem do db — založil silent
Problém se zápisem — založil cenda585
Problém se zápisem fopen — založil ProTom
Moderátoři diskuze