Показать сообщение отдельно
Старый 01.12.2003, 11:25   #7  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Желательно после 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 _FileNamestr _Data)
{
    
asciiIO File = new asciiIO(_FileName'W');
    
File.write(_Data);
}
..................

int deleteAllFiles()
{
    
int Handle=0i;
    
str FileName;
    
str Path 'D:\\\\Temp';
    
dialogButton Db;
    
container Files = ['1.txt''2.txt''ABC.txt'];

    for (
i=1i<=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: Если я опять что-то не так понял, опишите задачу поподробнее...