Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
ReDFoX43.rus
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 43
1

Как сделать так, что если файл существует return true, если нет - return false

04.09.2011, 11:48. Просмотров 1690. Ответов 9
Метки нет (Все метки)

Здравствуйте, я новичок в программировании.
Мой вопрос очень прост: как сделать так, что если файл существует return true если нет return false
Я сделал вот так:
C++
1
2
3
4
5
6
7
8
9
    char acc[128];
    str_format(acc, sizeof(acc), "accounts/%s.acc", name);
    FILE* accfile;
        if (accfile = fopen (acc, "a+")) 
        {
             fclose(accfile);
             return true;
        }
        return false;
Но оно всегда посылает return true; как я понял ?
Где моя ошибка? И можно ли реализовать мою идею вот так просто ??
Пожалуйста не посылайте меня на поиск, потому что я уже искал часа 2 но ничего не нашел
Нашел правда вот как
C++
1
2
    ifstream f(acc);
    return f.good();
Но ifstream необъявленный идентификатор, хотя я подключил
#include <fstream>
#include <istream>
#include <iostream>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2011, 11:48
Ответы с готовыми решениями:

В чем разница между return и return false/true
Привет всем. Вот подскажите плиз) return; return false; return true; ...

Переменной k логического типа присвоить значение true в том случае, если массив n целых чисел упорядочен по возрастанию, i значение false если нет
Условие задачи: Переменной k логического типа присвоить значение true в том...

Как открыть файл на чтение и запись, создав его, если его не существует, и перезаписать, если он существует?
Как открыть файл на чтение и запись, создав его, если его не существует, и...

Если число является простым, то функция возвращает true, если не является false
Напишите функцию, получающую целое число N(&gt;0). Если оно является простым, то...

While4°. Дано целое число N (> 0). Если оно является степенью числа 3, то вывести true, если не является — вывести false.
While. Дано целое число N (&gt; 0). Если оно является степенью числа 3, то вывести...

9
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.09.2011, 11:52 2
Ничего не понял.
Дайте полный код. И вообще, зачем вам fstream, если у вас код на си.
C
1
if (accfile = fopen (acc, "a+"))
Если создавать с режимом а+, то, если файл не существует, то он появится.
0
ReDFoX43.rus
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 43
04.09.2011, 11:56  [ТС] 3
Вобщем вот полный код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool PLAYER_ACCOUNT::exists(char *name)
{
    char acc[128];
    str_format(acc, sizeof(acc), "accounts/%s.acc", name);
    FILE* accfile;
    if (accfile = fopen (acc, "a+")) 
    {
        fclose(accfile);
        return true;
    }
    return false;
}
Я знаю что код на си, но игра сделана на С++ к которой относится этот код (игра не моя. онлайн игра, поэтому делаю свой мод для сервера)
В прошлой версии игры все было на си, а код я скопировал именно оттуда

Смысл: если есть файл return true; если его нету return false;
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.09.2011, 11:59 4
Открывайте с режимом "r", тогда файл не будет создаваться, и, если он не существует, вернется нулевой указатель.
0
ReDFoX43.rus
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 43
04.09.2011, 12:01  [ТС] 5
А с каким режимом тогда создавать ?

Добавлено через 46 секунд
Спасибо
Простите что я задавал вопросы после ваших ответов, просто интернет не очень хороший =)
0
Thinker
Эксперт С++
4233 / 2207 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
04.09.2011, 12:45 6
Есть функция access() из библиотеки <io.h>, которая проверяет присутствует ли файл на диске, то есть можно файл и вовсе не открывать.

Можно прописать такую функцию
C
1
2
3
4
5
#include<io.h>
int file_exists(char *filename)
 {
   return (access(filename, 0) == 0);
 }
и проверять, например if (file_exists("a.txt"))

Цитата Сообщение от diagon Посмотреть сообщение
Открывайте с режимом "r", тогда файл не будет создаваться, и, если он не существует, вернется нулевой указатель.
Диск может быть защищен от чтения и записи, тогда fopen() вернет ошибку, а файл тем не менее существует.
1
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.09.2011, 12:46 7
Цитата Сообщение от Thinker Посмотреть сообщение
Диск может быть защищен от чтения и записи, тогда fopen() вернет ошибку, а файл тем не менее существует.
Но сделать-то с ним ничего нельзя =)

Цитата Сообщение от Thinker Посмотреть сообщение
Есть функция access() из библиотеки <io.h>
Это какая-то нестандартная библиотека? gcc такой не знает.
1
Thinker
Эксперт С++
4233 / 2207 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
04.09.2011, 12:56 8
Цитата Сообщение от diagon Посмотреть сообщение
Но сделать-то с ним ничего нельзя =)
Да, но просто может нужна простая проверка на существование.

Цитата Сообщение от diagon Посмотреть сообщение
Это какая-то нестандартная библиотека? gcc такой не знает.
Возможно, тогда нужны другие методы.
0
ReDFoX43.rus
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 43
04.09.2011, 13:37  [ТС] 9
Цитата Сообщение от Thinker Посмотреть сообщение
Да, но просто может нужна простая проверка на существование.


Возможно, тогда нужны другие методы.
Да, вы правы. Нужна просто проверка на существование
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.09.2011, 14:02 10
Если есть буст, то можно так. Но если к файлу нет доступа - не уверен. У меня работает вроде, особо тестить лень.
C++
1
2
3
namespace fs = boost::filesystem;
if (fs::exists( fs::path("123.txt") )
  //файл существует
0
04.09.2011, 14:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2011, 14:02

Дано целое число N(>0). Если оно является степенью числа 3, то вывести TRUE, если не является-вывести FALSE.
Дано целое число N(&gt;0). Если оно является степенью числа 3, то вывести TRUE,...

Куда отправляет return ,если при команде ничего прописано?
куда отправляет return ,если при команде ничего прописано?

Если bool name=false, то !name это true?
Добрый день! Привожу код, взятый из книги. Непонятны следующие строки bool...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru