- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
TSearchRec sr;
if(FindFirst(Dir+"\\"+mask,iattr,sr)==0)
{
do
{
AnsiString Processes=Dir+"\\"+sr.Name;
//куча кода
AnsiString newName=sr.Name;
//еще код
AnsiString TmpFile=Dir+"\\"+newName;
if(RenameFile(Processes,TmpFile))
{
...
}
{
...
continue;
}
}while(FindNext(sr)==0);
}
guest 30.04.2009 16:17 # 0
А можно специально для таких тупых как я объяснить, что не так именно в строке 19?
guest 30.04.2009 18:42 # 0
А что, инструкция continue здесь будет выполняьбся всегда?
guest 30.04.2009 22:04 # 0
Да, всегда.
Смотри сам:
Processes = Dir+"\\"+sr.Name;
newName=sr.Name;
TmpFile=Dir+"\\"+newName; //читай, Dir+"\\"+sr.Name
Имеем всегда Processes==TmpFile.
А значит, RenameFile() вернет false, так как переименовать файл в себя ей не под силу.
А значит, выполнится continue.
И самое смешное - мне кажется, при выполнении continue условие не будет пересчитано, ибо цикл с постусловием!
А значит, прога будет мурыжить один файл.
guest 05.05.2009 14:59 # 0
"И самое смешное - мне кажется, при выполнении continue условие не будет пересчитано, ибо цикл с постусловием!"
http://msdn.microsoft.com/en-us/library/6e3dc2z3(VS.80).aspx
"In a do or while loop, the next iteration starts by reevaluating the controlling expression of the do or while statement."
Поэтому мне до сих пор интересно, что не так с точки зрения автора в строке 19.
blackray 25.08.2021 02:08 # 0