Як визначити, чи є файл на диску

Правда у цього способу є певні недоліки, які значно звужують його практичне застосування:

  • Він не буде працювати, якщо на комп'ютері не встановлено Internet Explorer 4.0 або вище, що може бути цілком ймовірно на комп'ютерах з ранніми версіями Windows 95 і Window NT 4.0.
  • Функція PathFileExists () не підтримує UNC імена файлів.

Спосіб 8 (CreateFile)

Найбільш очевидний і найгроміздкіший спосіб.

Спосіб 9 (Pure C ++ метод std :: ifstream. Ifstream)

Даний метод полягає в створенні тимчасового об'єкта класу ifstream .Якщо файл з вказаним ім'ям не існує то operator void * () цього класу повертає NULL pointer - інакше повертається покажчик на сам створений об'єкт (this). Це значення перевіряється на NULL pointer - і. Усе.

вірніше майже все =)

В даному коді ifstream це typedef basic_ifstream > Ifstream; якщо ж Ви користуєтеся старими заголовними файлами (з розширенням .h) - то для Вас ifstream - це ніякий не typedef - а справжнісінький клас. І все було б чудово - якби не одне але - в цьому випадку конструктор з ім'ям файлу в якості параметра СТВОРИТЬ файл (якщо він не існує) і в будь-якому випадку, перевірка на наявність файлу дасть позитивний результат. Справа в тому, що для "старого" ifstream 'а треба явно вказувати що НЕ треба створювати файл через додавання прапора ios. nocreate в другому параметрі конструктора. А ось і сам код для такого випадку:

Даний метод хороший тим що він 100% портабелен - тобто використовуються тільки можливості самої мови С ++ (в особі його стандартної бібліотеки - яка є його частиною).

Спосіб 10 (.NET)

Можу вас порадувати, в .NET всі наші муки закінчаться. Для з'ясування існування файлу можна буде просто викликати метод FileExists класу File. наприклад:

Спосіб 11 (Script)

Жоден з перерахованих способів не буде працювати з .html документа. Зате з скрипта доступний Scripting.FileSystemObject і нам цього достатньо.

Ми цілком можемо використовувати Scripting.FileSystemObject і в COM-модулі:

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

Схожі статті