Stránka 1 z 1

C++, CreateDirectory

Napsal: 10 zář 2011 12:59
od DavidXfire
Ahoj, nevíte prosím jestli se dá v cyklu měnit string?
Konkrétně mám na mysli toto:

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
int z=0;

do
{

string y;

cin >> y;

LPSECURITY_ATTRIBUTES attr;
attr = NULL;

CreateDirectory(y.c_str(), attr);

cout << "\nAdresar vytvoren!\n";
z++;
}
while( z < 20);

cin.get();
return 0;
}

Tohle vytvoří 20 adresářu, ale pokaždé se musí zadávat jméno, zkoušel jsem:
int x=1:
string y;
y = x;

x++

Ovšem to vytvořilo jen adresáře !@#$%^&*()ABCDEF...... Z1234567890, a dál už to nejelo, i pokud jsem dal z < 200 a víc, neví někdo co s tim? Děkuji David

Re: C++, CreateDirectory

Napsal: 10 zář 2011 21:17
od faraon
Není mi jasné co ten program má přesně dělat a nedělá. Nepomohlo by vyhodit deklaraci těch proměnných ven z těla cyklu?

Kód: Vybrat vše

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
   int z=0;
   string y;
   LPSECURITY_ATTRIBUTES attr;
 
   do
   {
      cin >> y;
      attr = NULL;
      CreateDirectory(y.c_str(), attr);
      cout << "\nAdresar vytvoren!\n";
      z++;
   }
   while( z < 20);

   cin.get();
   return 0;
}


String se samozřejmě měnit dá, je to běžná proměnná. Akorát bacha na to že Windows je (na rozdíl od unixových systémů) case insensitive, takže adresáře "A" a "a" jsou pro něj jeden a tentýž, nikoliv dva různé!
Navíc některé znaky (zejména * a ?) by se ve jménech souborů a adresářů neměly vyskytovat, sice takové jde vytvořit, ale některé programy s nimi nedokáží pracovat. Možná by se vyplatilo udělat si pole povolených znaků a z nich brát postupně jeden po druhém...