Dobrý den, mám takový problém zde je moje funkce:
bool ArrayofDirContents(const wchar_t *sDir, string &nazev_souboru, vector<string>& strpole) // tato funkce slouží k vypsání všech souborů které obsahují název fsp do souboru .dir
{
WIN32_FIND_DATA fdFile;
HANDLE hFind = NULL;
wchar_t sPath[2048];
wstring poms;
int raise = 0;
//Specify a file mask. *.* = We want everything!
wsprintf(sPath, L"%s\\*.fsp", sDir);
if ((hFind = FindFirstFile(sPath, &fdFile)) == INVALID_HANDLE_VALUE)
{
wprintf(L"Path not found: [%s]\n", sDir);
return false;
}
do
{
//Find first file will always return "."
// and ".." as the first two directories.
if (wcscmp(fdFile.cFileName, L".") != 0
&& wcscmp(fdFile.cFileName, L"..") != 0)
{
//Build up our file path using the passed in
// [sDir] and the file/foldername we just found:
wsprintf(sPath, L"%s", fdFile.cFileName);
//Is the entity a File or Folder?
if (!(fdFile.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY))
{
poms = sPath;
nazev_souboru = string(poms.begin(), poms.end());
int n = 0;
for (int i = 0; i <= n; i = i + 1) {
strpole.resize(raise);
string str = nazev_souboru;
char *cstr = new char[str.length() + 1];
strcpy(cstr, str.c_str());
//strpole[i] = cstr;
strpole.push_back(cstr);
/*cout << strpole[i];
cout << "Vypis ve funkci Array" << endl;*/
raise++;
}
n++;
/*ListDirectoryContents(sPath);*/ //Recursion, I love it!
}
}
} while (FindNextFile(hFind, &fdFile)); //Find the next file.
FindClose(hFind); //Always, Always, clean things up!
return true;
}a zde je muj main
int main(int argc, char *argv[])
{
char *p;
int num;
int size = 0;
errno = 0;
long conv;
double minimum = 10;
double input;
char* filename;
wstring adr(L".");
const wchar_t* adresar;
const wchar_t* adresar2;
string nazev_souboru;
adresar = adr.c_str();
/*
1. /a
2. /d
3. /h
4. /?
5. /k
6. /l
7. /m
8. /o
9. /s
10. /z
*/
for (unsigned i = 1; i < argc; i++) {
conv = strtol(argv[i], &p, 10);
// Check for errors: e.g., the string does not represent an integer
// or the integer is larger than int
//ZACATEK VNORENYCH
if (errno != 0 || *p != '\0' || conv > INT_MAX) {
// Put here the handling of the error, like exiting the program with
// an error message
cout << "";
}
else if (strcmp(argv[1], "/a") == 0) {
// No error
num = conv;
minimum = num;
cout << "/a OK" << endl;
if (argv[3] == NULL) {
cout << "" << endl;
}
else if (strcmp(argv[3], "/d") == 0) {
string str = argv[4];
string str2 = '"' + str + '"';
adr.assign(str2.begin(), str2.end());
adresar = adr.c_str();
wcout << adresar;
cout << "/d OK" << endl;
}
}
else {
adresar = adr.c_str();
}
if (strcmp(argv[1], "/l") == 0) {
SaveDirectoryContents(L".", nazev_souboru);
cout << "/l OK" << endl;
}
// ZACATEK SAMOSTATNYCH
if (strcmp(argv[1], "/h") == 0) {
cout << "REP_FSP - kontrola FSUTIL VOLUME FREESPACE protokolu" << endl;
cout << "Predavane parametry :" << endl;
cout << "/ a - alarm";
cout << "hranice minimalniho volneho prostoru pro vyhodnoceni alarmu" << endl;
cout << "default je 10" << endl;
cout << "/ d - kontrolovany adresar" << endl;
cout << "neni - li zadan, pouzije se startovaci adresar aplikace" << endl;
cout << "/ h, / ? -help" << endl;
cout << "vypise tento text" << endl;
cout << "/ k - co vypisovat" << endl;
cout << "jakakoliv hodnota krome ALL zpusobi, ze se budou vypisovat pouze" << endl;
cout << "chybove stavy" << endl;
cout << "default je ALL" << endl;
cout << "/ l - seznam kontrolovaných fsp protokolu" << endl;
cout << "neni - li zadan, vytvori program vypis kontrolovaného adresare s nazvem" << endl;
cout << "fsp.dir v kontrolovanem adresari" << endl;
cout << "Pri zpracovani je z namu na jednotlivých radcich vyseknut jen nazev" << endl;
cout << "souboru a doplnen cestou kontrolovaného adresare." << endl;
cout << "/ m - maximalni stari fsp protokolu v minutach" << endl;
cout << "je - li 0, tak se stari nevyhodnocuje" << endl;
cout << "default je 0" << endl;
cout << "/ o - vystupni protokol" << endl;
cout << "default je fsp.out v kontrolovanem adresari" << endl;
cout << "/ s - smsfile" << endl;
cout << "jmeno smsfile bez pripony, default hodnota je fsp" << endl;
cout << "vytvori se soubor s priponou sms" << endl;
cout << "a v pripade nejake chyby jeste druhy s priponou err" << endl;
cout << "/ z - umoznuje potlacit vypis zahlavi a zapati" << endl;
cout << "jakakoliv hodnota krome YES potlaci vypis zahlavi a zapati" << endl;
cout << "default je YES" << endl;
}
}
vector<string> strpole;
int chyby, l;
chyby = 0;
bool vysledek;
//"C:\\Users\\beran\\Documents\\Visual Studio 2017\\Projects\\ConsoleApplication1\\ConsoleApplication1"
//promenna adresar ma byt
vysledek = ArrayofDirContents(adresar, nazev_souboru, strpole);
vector<string>::iterator i;
if (vysledek == true) {
writeFile(nazev_souboru, strpole, chyby, l, minimum);
writeSms(strpole, chyby, l, minimum);
for (i = strpole.begin(); i < strpole.end(); i++) {
cout << *i;
cout << '\n';
}
}
//SaveDirectoryContents(L".", nazev_souboru);
}
Chyba je v tom, že funkce Arrayofdircontents, chce přebírat const wchar_t ale když mu ho předám (proměnná adresar) tak to hazi errory, přitom když tam zadám ručně L"C:\nějaká cesta k adresari" tak to funguje. Takze nevim kde delam chybu, dik moc pokud poradite.
Fórum › C / C++
Problém s konzolovou app
Opiš sem chybu, kterou překladač napsal.
const wchar_t* adresar;
const wchar_t* adresar2;
string nazev_souboru;
adresar = adr.c_str();
Máš const wchar_t* a o pár řádků do něj něco cpeš, pravděpodobně je to známé až za běhu programu.
Příšerně nečitelné. Pro vkládání kódu je tu volba, v okénku editoru příspěvku klikni na tlačítko s <?.
hu
#5 Adam
funkce wcscmp slouží k porovnání wide character řetězců viz http://www.cplusplus.com/reference/cwchar/wcscmp/ . "Básník tím chtěl říci", že se nějaká akce má vykonat, když fdFile.cFileName není "." a fdFile.cFileName není "..".
hu
"." je překvapivě řetězec. A ještě větší překvapení - ".." je taky řetězec.
Smysl použití těchto řetězců a této podmínky by vyplynul z kontextu programu, kde je to použito.
hu
Ta podmínka žádnou příponu nerozpozná. Udělá jen to, co jsem napsal v #6
hu
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
C# Desktop app do Mobile app — založil kironet
Web app vs desktop app — založil Plui
[VS 2015 C++] Resource Manager pro konzolovou aplikaci — založil Polda18
C# Okenna app — založil andy
FaceBook App — založil FB
Moderátoři diskuze