Желательно после CreateFIle и работы с файлами закрывать их хандлеры, то есть использовать
WinAPI::closeHandle(handle);
Кроме того, если запись в файлы осуществляется при помощи классов-наследников
IO, то они тоже любят оставлять за собой файлы открытыми. Причем явно вызвать метод finalize() не получается. Зато в хелпе читаем:
Цитата:
Close the file and, if data was written, flush the file buffers to disk. The object is normally finalized by leaving the scope so finalize is normally not called directly.
Исходя из чего, пытаемся смоделировать
leaving the scope, то есть кусок кода, отвечающего за запись в файлы, вынести в отдельный метод, дабы при выходе из него и происходил желанный нами finalize(). Таким образом и достигаем желаемого результата:
PHP код:
void write2file(str _FileName, str _Data)
{
asciiIO File = new asciiIO(_FileName, 'W');
File.write(_Data);
}
..................
int deleteAllFiles()
{
int Handle=0, i;
str FileName;
str Path = 'D:\\\\Temp';
dialogButton Db;
container Files = ['1.txt', '2.txt', 'ABC.txt'];
for (i=1; i<=conlen(Files); i++)
{
FileName = conpeek(Files,i);
this.write2file(Path + "\\\" + FileName, 'test string');
}
// во время приостановки Х++ кода можно убедиться в присутствии файлов
pause;
[Handle, FileName] = WinApi::findFirstFile(Path + '\\\\*.txt');
if (Handle == -1) return -1; // not found
Db = BOX::yesNo("В указанном каталоге уже есть TXT файлы!!! Удалить их?",DialogButton::Yes);
if (Db == DialogButton::No) return 0;
while (FileName)
{
WinApi::deleteFile(Path + "\\\\" + FileName);
FileName = WinApi::findNextFile(Handle);
}
WinApi::findClose(handle);
return 1;
}
PS: Если я опять что-то не так понял, опишите задачу поподробнее...