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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2011, 16:43   #1
ReRayne
 
Регистрация: 11.05.2011
Сообщений: 5
По умолчанию Write не пишет в файл

Ось Ubuntu 10.04LTS, среда eclipse Galileo.
Сабж:
Код:
#define MAX_ANALOG_INPUTS 4

char* path;
FILE *analog_files[MAX_ANALOG_INPUTS];

int main(int argc, char *argv[])
{
        char i=0;
	char *file_name = (char*) malloc(100);

        /*Получение пути к каталогу*/
	path = (char*) malloc(strlen(getenv("HOME"))+strlen("/BACnet_Object"));

	sprintf(path, "%s%s", getenv("HOME"), "/BACnet_Object");

	/*создание дирректории для работы с объектами*/
	printf("\n""Path to BACnet Objects: %s\n\n", path);
	mkdir(path, S_IRUSR | S_IWUSR | S_IROTH | S_IWOTH);

for (i = 0; i<MAX_ANALOG_INPUTS; i++)
	{
		sprintf(file_name, "%s/A%i.txt", path, i);
		printf("File address: %s\n", file_name);

		if ((analog_files[i] = fopen(file_name, "r")) == NULL)
		{
			printf("Файл %s не существует!\n", file_name);
			analog_files[i] = fopen(file_name, "w");
			if (write(analog_files[i], "Hello World!", strlen("Hello World!")) < 0)
				printf("Oh, lol!\r\n");


			close(analog_files[i]);

		}
		else
			remove(file_name);
	}

}
На выходе прога выдает:
Код:
File address: /home/rayne/BACnet_Object/A0.txt
Файл /home/rayne/BACnet_Object/A0.txt не существует!
Hello World!

File address: /home/rayne/BACnet_Object/A1.txt
Файл /home/rayne/BACnet_Object/A1.txt не существует!
Oh, lol!

File address: /home/rayne/BACnet_Object/A2.txt
Файл /home/rayne/BACnet_Object/A2.txt не существует!
Oh, lol!

File address: /home/rayne/BACnet_Object/A3.txt
Файл /home/rayne/BACnet_Object/A3.txt не существует!
Oh, lol!
Если пытаться создать файл в папке, которая лежит в домашней директории, файл даже не создается.
Если прописывать ему:
Код:
sprintf(file_name, "A%i.txt", i);
То файл создасться, но write снова вернет значение меньше 0.
ReRayne вне форума Ответить с цитированием
Старый 11.05.2011, 17:07   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

У меня вообще на этапе компиляции ошибки выдает...
Напиши список подключаемых хедеров.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 11.05.2011, 23:05   #3
ReRayne
 
Регистрация: 11.05.2011
Сообщений: 5
По умолчанию

Mandrivnyk, вот полный код:
Код:
#include <malloc.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>
#include <unistd.h>

#define MAX_DESCRIPTOR 4
#define MAX_PATH_LENGHT 100
#define WORK_DIR "/Objects"

char *path;

int main()
{
	int i;

	FILE *descriptor_array[MAX_DESCRIPTOR];
	char *file_name;

	file_name = (char *) malloc(MAX_PATH_LENGHT);
	path = (char *) malloc(strlen(getenv("HOME"))+strlen(WORK_DIR));

	sprintf(path, "%s%s", getenv("HOME"), WORK_DIR);

	printf("%s\n", path);

	mkdir(path, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);

	for (i = 0; i<MAX_DESCRIPTOR; i++)
	{
		sprintf(file_name, "%s/A%i.txt ", path, i);

		printf("Имя файлa: %s\n", file_name);

		if ((descriptor_array[i] = fopen(file_name, "r")) == NULL)
		{
			printf("Файл не существует!""\n");

			if ((descriptor_array[i] = fopen(file_name, "w")) == NULL)
			{
				printf("%s\n", strerror(errno));
			}
			else
			{
				printf("Создание файла прошло успешно!\n");

				if (write(descriptor_array[i], "Hello Word!", strlen("Hello Word!")) < 0)
					printf("ERROR: %s\n", strerror(errno));
				else
					printf("Успешная запись в файл\n");

				close(descriptor_array[i]);
			}

			printf("\n");
		}
	}

	return 0;
}
сабж, с не созданием файла разобралась, надо было при создании директории выставить право на executable. Но в файл все равно не пишет, вываливает вот что:
Код:
/home/rayne/Objects
Имя файлa: /home/rayne/Objects/A0.txt 
Файл не существует!
Создание файла прошло успешно!
ERROR: Bad file descriptor

Имя файлa: /home/rayne/Objects/A1.txt 
Файл не существует!
Создание файла прошло успешно!
ERROR: Bad file descriptor

Имя файлa: /home/rayne/Objects/A2.txt 
Файл не существует!
Создание файла прошло успешно!
ERROR: Bad file descriptor

Имя файлa: /home/rayne/Objects/A3.txt 
Файл не существует!
Создание файла прошло успешно!
ERROR: Bad file descriptor
ReRayne вне форума Ответить с цитированием
Старый 12.05.2011, 17:13   #4
ReRayne
 
Регистрация: 11.05.2011
Сообщений: 5
По умолчанию

Вопрос решился. Надо юзать fwite, а write.
ReRayne вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CStdioFile не полностью пишет данные в файл metoflex Общие вопросы C/C++ 1 04.02.2011 17:21
с++ запись в бинарный файл ofstream::write Farrel Общие вопросы C/C++ 1 25.11.2010 00:19
Не пишет кириллицу в ini-файл. В чем ошибка? Widar Помощь студентам 4 11.10.2010 14:26
CopyFile пишет файл размером 0 б. Alex Cones Общие вопросы Delphi 10 11.07.2010 03:44
Borland C++. MediaPlayer1 не пишет в файл Garic_ Помощь студентам 8 15.12.2009 20:12