Progam podwajający backslash. błąd E2034 i E2342

0

program pobiera ścieżkę do folderu podwaja backslash i ma usunąć ten folder

String folder;
folder=(DirectoryListBox1->Directory);
for (int i=0; i<folder.Length(); i++)
{
   if (folder[i]==92)
   {
     folder.Insert(i, "\\");         //do tego wyskakują błędy
     ++i;
   }
}
//RemoveDir(folder);
 

[BCC32 Error] Unit1.cpp(49): E2034 Cannot convert 'char const[2]' to 'int'
[BCC32 Error] Unit1.cpp(49): E2342 Type mismatch in parameter 'index' (wanted 'int', got 'const char *')

0

Sprawdź w dokumentacji kolejność parametrów.

0

poprawiłem teraz mam inny problem kompiluje mi się ale po naciśnięciu buttona wyskakuje błąd
[BCC32 Warning] Unit1.cpp(49): W8098 Multi-character character constant
i w pliku ustring.h pokazuje na linijkę
ThrowIfOutOfRange(idx); // Should Range-checking be optional to avoid overhead ??

 
String folder;
folder=(DirectoryListBox1->Directory);
for (int i=0; i<folder.Length(); i++)
{
   if (folder[i]=='\\')
   {
     folder.Insert(i, '\\\\');  //tu błąd
     ++i;
   }
}
RemoveDir(folder);
DirectoryListBox1->Update();
0

Coś mi tu nie pasuje. Nie mam borlanda na kompie ale wklej nagłówek z helpa dla funkcji Insert. W necie sprawdzałem i ona wyglądała Insert( String, index ) - nie wiem czy dobrze trafiłem. Jeśli tak to masz pomyloną kolejność.

0

faktycznie powinno być odwrotnie folder.Insert("\\", i); kompiluje się ale po uruchomieniu tego kodu wyskakuje błąd i pokazuje w tym pliku ustring.h linijkę "ThrowIfOutOfRange(idx); // Should Range-checking be optional to avoid overhead ??"
http://www.fotosik.pl/pokaz_obrazek/be6136a77bd98be8.html

0

poprawiłem to w pętli for zamiast liczyć od 0 dałem od 1. teraz po uruchomieniu trochę muszę poczekać i wyskakuje mi błąd
http://www.fotosik.pl/pokaz_obrazek/5a5ba80bdaea5b48.html

1

załatwisz to w jednej linijce metodą replace().
błąd, który robisz, polega na dodaniu dwóch backslashów, kiedy w stringu już masz jeden, to powoduje, że razem będą trzy. a że nie uwzględniłeś tego przy zwiększaniu zmiennej i, to w następnej iteracji pętli trafiasz znowu na trzeci z dodanych backslashów; następnie dodajesz do niego dwa, potem znowu trafiasz na piąty, siódmy itp, a string wydłuża się aż skończy się pamięć (tj. nie znajdzie się ciągły blok pamięci o wielkości takiej, jak długość stringa plus kilka bajtów).
na przyszłość polecam użycie debuggera i samodzielne rozwiązywanie prostych problemów tego typu.

0

faktycznie dzięki. teraz dodaje ten "" dobrze ale czemu dalej nie usuwa folderu?

0

"proces nie może uzyskać dostępu do pliku" jak ten problem rozwiązać?

0

Powiedz dlaczego ktoś ma wiedzieć jak nie napisałeś jak i czym próbujesz kasować plik? By uzyskać pomoc trzeba zadać pytanie. Bez kodu i komunikatu błędu nikt nie pomoże. Trzeba podać także kompilator, system operacyjny - bez tego nie da rady. Skąd mam wiedzieć że używasz Win XP, Viste, 7 czy może jakiejś dystrybucji Linuksa? Korzystaj z wbudowanej pomocy w środowisko - widać że masz z tym problemy(przykład z Insert()). Poćwicz z nim pracę a uwierz mi - będziesz miał mniej pytań a praca będzie Ci lepiej szła.

0

przepraszam myślałem że napisałem w kodzie wcześniej

 
AnsiString folder;
folder=(DirectoryListBox1->Directory);
for (int i=1; i<folder.Length(); ++i)
{
   if (folder[i]==92)
   {
     folder.Insert("\\", i);
     ++i;
   }
}

folder="rd /q /s "+folder;
char* znaki;
znaki = folder.c_str();
system(znaki);                            //pokazuje że ścieżka do folderu jest nie prawidłowa
//RemoveDir(znaki);                    //to też nie działa
DirectoryListBox1->Update();

1 użytkowników online, w tym zalogowanych: 0, gości: 1