Problém s konzolovou app – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s konzolovou app – C / C++ – Fórum – Programujte.comProblém s konzolovou app – C / C++ – Fórum – Programujte.com

 

Adam
~ Anonymní uživatel
176 příspěvků
8. 8. 2017   #1
-
0
-

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.
 

Nahlásit jako SPAM
IP: 80.250.9.–
Adam
~ Anonymní uživatel
176 příspěvků
8. 8. 2017   #2
-
0
-

#1 Adam

Ten koment u te funkce je špatně to nevypisuje do dir ale tato funkce vyhledá ve složce všechny .fsp soubory a načte je do vektoru.

Nahlásit jako SPAM
IP: 80.250.9.–
Adam
~ Anonymní uživatel
176 příspěvků
8. 8. 2017   #3
-
0
-

#2 Adam
A když si necham vypsal wcout << adresar tak to vypíše dobře tuhle cestu: C:\testovani

Nahlásit jako SPAM
IP: 80.250.9.–
8. 8. 2017   #4
-
0
-

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

Nahlásit jako SPAM
IP: 195.178.67.–
Adam
~ Anonymní uživatel
176 příspěvků
26. 11. 2018   #5
-
0
-

if (wcscmp(fdFile.cFileName, L".") != 0
   && wcscmp(fdFile.cFileName, L"..") != 0)
  {

k čemu slouží tento if? díky moc

Nahlásit jako SPAM
IP: 80.250.9.–
26. 11. 2018   #6
-
0
-

#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

Nahlásit jako SPAM
IP: 195.178.67.–
Adam
~ Anonymní uživatel
176 příspěvků
27. 11. 2018   #7
-
0
-

původní koment je  //Find first file will always return "."
  //    and ".." as the first two directories. Co tedy znamená ta "." a ".."? Nemuzu si to nejak přeložit.

Nahlásit jako SPAM
IP: 80.250.9.–
27. 11. 2018   #8
-
0
-

"." 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

Nahlásit jako SPAM
IP: 195.178.67.–
Adam
~ Anonymní uživatel
176 příspěvků
27. 11. 2018   #9
-
0
-

#8 hlucheucho
tak v dané funkci jde o nalezení veškerých souborů s danou příponou .fsp tak potom to tam má jaký smysl ta podmínka že pokud se to nerovná . a .. ? Díky

Nahlásit jako SPAM
IP: 80.250.9.–
27. 11. 2018   #10
-
0
-

Ta podmínka žádnou příponu nerozpozná. Udělá jen to, co jsem napsal v #6

hu

Nahlásit jako SPAM
IP: 195.178.67.–
gna
~ Anonymní uživatel
1891 příspěvků
27. 11. 2018   #11
-
0
-

"." je aktuální adresář a ".." nadřazený adresář. Jsou automaticky ve všech adresářích a pointa toho ifu je tyhle položky ignorovat.

Nahlásit jako SPAM
IP: 213.211.51.–
Adam
~ Anonymní uživatel
176 příspěvků
27. 11. 2018   #12
-
0
-

diky i hlucheucho za snahu

#11 gna
konecne někdo me pochopil :D diky

Nahlásit jako SPAM
IP: 80.250.9.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

C# Desktop app do Mobile app — založil kironet

Web app vs desktop app — založil Plui

C# Okenna app — založil andy

FaceBook App — založil FB

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý