Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2010, 14:16   #1
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию Проверка файла на уже существующий

Здравствуйте,уважаемые форумчане.Возник вопрос:Есть имя файла и надо его создать.НО если такой файл существует уже, надо выдать ошибку..Если файла нету, то он создается и доступен для записи и чтения. Как это реализовать?

Код:
#include <stdio.h>
#include <string.h>
#include<stdlib.h>

const char* filename = " newfile.txt"

main ()
{
//Сравнить имя файла функцией strcmp?
}

Последний раз редактировалось Serjuk; 08.11.2010 в 14:18. Причина: забыл [/CODE] поставить
Serjuk вне форума Ответить с цитированием
Старый 08.11.2010, 14:34   #2
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

http://programmersclub.ru/34/ читайте
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 08.11.2010, 14:56   #3
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

Спасибо,
Ну это на си++,а мне надо на си
На сколько я понял из прочитанного на си++ это будет так :
Код:
main()
{
fstream output_file("NEWFILE.TXT", ios::noreplace); //Если файл существует, операция открытия должна быть прервана и должна возвратить ошибку.
fstream output_file("NEWFILE.TXT",ios::in)//Указывает открыть файл для ввода .
}
Но в си нет потоков.

Код:

#include <stdio.h>
#include <string.h>
#include<stdlib.h>

const char* filename = " newfile.txt"
//Функция ошибки
void error ()
{
fprint (stderr, errno(&wr));
}
main ()
{

//функция инициализации

if (create (&wr,filename))
{
 error();
return -1;
}
}
Тут возникает вопрос как реализовать функцию create - которая проверяет на существующий файл и создает его для чтения и записи,а если он существует то выдает ошибку.

wr - структура которая содержит код ошибки операции.

Код:
struct wr 
{
int er; // код ошибки
};
}
Serjuk вне форума Ответить с цитированием
Старый 08.11.2010, 21:53   #4
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

Ребят, помогите пожалуйста)
Serjuk вне форума Ответить с цитированием
Старый 08.11.2010, 22:34   #5
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

пойду гуглить, самому интересно стало
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 08.11.2010, 22:44   #6
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

Вот я кажись нашел)
Код:
if ((access(filename,00))==0 {
perror("filename is created ");
exit(1);
}

else
fh=open(filename, "w");
Правильно?
Serjuk вне форума Ответить с цитированием
Старый 08.11.2010, 22:55   #7
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

проверьте
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 08.11.2010, 23:11   #8
Kolyanu4
 
Регистрация: 07.11.2010
Сообщений: 3
По умолчанию

Вот пример, может поможет.

FILE *ptr;
main ( )
{
if (( ptr = fopen (“test.txt”, “r”)) != NULL)
/* Виконуються дії для відкритого файлу */
else {
printf ( “Помилка відкриття файлу”);
return 0;
}
Kolyanu4 вне форума Ответить с цитированием
Старый 18.11.2010, 18:57   #9
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

Ребят,задание немного изменилось..Помогите пожалуйста.
Создание и открытие единицы хранения.
Реализовать функцию int create(struct structura* _n, const char* _filename, size_t _ssize);, которая создает и открывает единицу хранения. Где _n - дескриптор единицы хранения, _filename - путь к файлу,_ssize - размер слота.
При успешном возращении - return 0 , ненулевое значение в противном случае (#errno)
Функция должна:Создавать и открывать новую единицу хранения в ординарном файле.
Если _filename указывает на существующий файл,то функция завершается ошибочно.В случае создания файла - он пустой.
Необходимо только, что бы файл был доступен для чтения и записи владельцу.
Если функция завершается с ошибкой, то файл не создается, не открывается и связь с дескриптором не устанавливается.В этом случае для дескриптора может быть вызвана только функция #errno для обработки кода ошибки.

Код:
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

static struct structura		STRUCTURA;
static const char*		filename = "test.dat";
static size_t			ssize = 1024;


void trace_error()
{
	fprintf(
		stderr,
		"FIO ERROR %d: %s\n",
		errno(&STRUCTURA),
		)
	);
}



int initfile()
{
	
	if(su_create(&STRUCTURA, filename, ssize))
	{
		trace_error();
		return -1;
	}
Код:

create(&STRUCTURA,   filename, ssize)
{
 FILE * fp; //не знаю можно ли так объявлять? 
    if ((fp = fopen (filename,"r")) ==NULL){ // проверяем создан ли файл
        printf (" Такого файла не существует" );
        fp = fopen (filename,"w"));//файл не создан,поэтому создаем.
        return 0;
    }
На этом к сожалению заканчивается мое знание.. В качестве единиц хранения могут использоваться как регулярные файлы так и дисковые разделы. В первом случае единицы хранения могут создаваться и расширяться.
Дескриптор единицы хранения имеет вид:
Код:
struct structura
{
	int fd;		// Дескриптор файла.
	int er;		// Код ошибки последней операции.
	size_t ssize;	// Размер слота.
};
ВОПРОС возник в : правильно ли я проверяю файл на создавшийся ? как связать дескриптор файла и что это такое? и как создать единицу хранения размером ssize ?
Serjuk вне форума Ответить с цитированием
Старый 18.11.2010, 20:10   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
единицы хранения.
Это кто такое?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заменить существующий файл. agregator Microsoft Office Excel 3 08.11.2010 09:37
проверка на формат файла -=Virus=- Мультимедиа в Delphi 3 27.10.2010 22:51
Проверка расширения файла Михаил Юрьевич Общие вопросы Delphi 6 20.09.2009 22:22
Проверка наличия файла russian-stalker Общие вопросы Delphi 4 31.08.2008 19:27
Проверка атрибутов файла. v01umE Общие вопросы C/C++ 2 31.05.2008 08:37