Как определить, есть ли файл на диске - Способ 11 (Script)

ОГЛАВЛЕНИЕ

 

Способ 11 (Script)

Ни один из перечисленных способов не будет работать из .html документа. Зато из скрипта доступен Scripting.FileSystemObject и нам этого достаточно.


function FileExists (fname)
{
     var fso = new ActiveXObject("Scripting.FileSystemObject");
     return fso.FileExists(fname);
}

Мы вполне можем использовать Scripting.FileSystemObject и в COM-модуле:


HRESULT FileExists (LPOLESTR oszFilename)
{
    CComPtr<IFileSystem> pfs;
    HRESULT hr = pfs.CoCreateInstance(OLESTR("Scripting.FileSystemObject"));
    if (SUCCEEDED(hr)) {
        VARIANT_BOOL ret = VARIANT_FALSE;
        hr = pfs->raw_FileExists(fname, &ret);
        if (SUCCEEDED(hr))
            hr = ret ? S_OK : S_FALSE;
    }
    return hr;
}

Фактически, это очень извращенный способ вызова все той же функции access() из способа 1, с той разницей, что FileSystemObject работает с именами файлов в UNICODE и под WindowsNT/2k передает имя файла напрямую, а под Windows 9x/Me (и даже 3.1 с интернет эксплорером!) сам преобразовавает его в ANSI.