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

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

04.09.2011, 11:48. Просмотров 2292. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2011, 11:48
Ответы с готовыми решениями:

Что такое в jquery и java return false и return true
Если я правильно понимаю, то return false отменяет действие по умолчанию, например клик по ссылке,...

Что это isOk(int s),setAge(int g){if(isOk(g){age=g;return true;}else{.;return false;}}.getName(){return name;}?
package com.company; import java.io.Serializable; public class person implements Serializable {...

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

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

9
Higher
1944 / 1210 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.09.2011, 11:52 2
Ничего не понял.
Дайте полный код. И вообще, зачем вам fstream, если у вас код на си.
C
1
if (accfile = fopen (acc, "a+"))
Если создавать с режимом а+, то, если файл не существует, то он появится.
0
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
Higher
1944 / 1210 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.09.2011, 11:59 4
Открывайте с режимом "r", тогда файл не будет создаваться, и, если он не существует, вернется нулевой указатель.
0
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 43
04.09.2011, 12:01  [ТС] 5
А с каким режимом тогда создавать ?

Добавлено через 46 секунд
Спасибо
Простите что я задавал вопросы после ваших ответов, просто интернет не очень хороший =)
0
Эксперт С++
4252 / 2226 / 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
Higher
1944 / 1210 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.09.2011, 12:46 7
Цитата Сообщение от Thinker Посмотреть сообщение
Диск может быть защищен от чтения и записи, тогда fopen() вернет ошибку, а файл тем не менее существует.
Но сделать-то с ним ничего нельзя =)

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

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


Возможно, тогда нужны другие методы.
Да, вы правы. Нужна просто проверка на существование
0
Higher
1944 / 1210 / 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.09.2011, 14:02

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Сравнивать числа из 1 и 2 столбца и если совпадают, то пишется true, а если нет, то false
помогите, пожалуйста, исправить код так чтобы сравнивались числа из 1 и 2 столбца и если совпадают,...

Если в наборе имеется числа меньше к, то вывести true, если нет - false
1) n&gt;0 .Найти сумму n*n+(n+2)*(n+2)+...+(2*n)*(2*n) 2)n&gt;1.Вывести наименьшее из целых чисел k,для...

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

Написать метод который возвращает true если хоть где-то в массиве идут три числа в порядке возрастания, false если нет
Написать метод который возвращает true если хоть где-то в массиве идут три числа в порядке...


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

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

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