Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция сохранения файла 
:(
    Опции темы
mr.Anderson
Дата 8.8.2005, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Я такой вот код написал:
Код

FILE * save_text_to_file(string directory,string text,string file_name)
{
 cout<<"Enter directory:\n"; cin>>directory;
 cout<<"Enter file_name:\n"; cin>>file_name;
 string full_patch=directory+file_name;
 FILE *file;
 if((file=open_file(full_patch,"w"))!=NULL)
 {
  fprintf(file,"%s",text);
  fclose(file);
  return file;
 }
 else return NULL;
}

По идее, функция должна сохранять заданный во втором аргументе текст в файл. Но у меня сейчас нет возможности проверить ее работоспособность. Прошу проверить, оценить и поправить, если что не так.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Mayk
Дата 8.8.2005, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(sim7 @ 8.8.2005, 09:21)
FILE * save_text_to_file(string directory,string text,string file_name)

Не пойму что делают directory и file_name в аргументах.

Цитата(sim7 @ 8.8.2005, 09:21)
string full_patch=directory+file_name;

Директория от имени файла должна отделятся слешем. Когда человек видит
Enter directory:, то он (в силу природной лени) не вбивает последний слеш. Грубо надо так:full_path = directory+'\\'+file_name;
Кстати, надо бы проверить что сделает дос/винда, если указать два и более разделителя подряд. То есть является ли имя "bc31\\\\bin\\bcc.exe" допустимым.

Цитата(sim7 @ 8.8.2005, 09:21)
  fprintf(file,"%s",text);

Заменить text на text.c_str()
Цитата(sim7 @ 8.8.2005, 09:21)
fclose(file);
  return file;

Возвращается дескриптор на закрытый файл, что не есть хорошо, так как может появится желение туда что-то дописать. Надо либо не закрывать файл, либо изменить возвращаемое значение на bool/int и в случае успеха возвращать, допустим, true/1, а в случае неудачи, допустим, false/0.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
comcon1
Дата 8.8.2005, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



А что за функция open_file?? Это что чисто борландовская??
Я знаю тока fopen(const char *, const char *), то есть с ней надо так:
Код

fopen(full_patch.c_str(), "w+");



--------------------
PM MAIL   Вверх
mr.Anderson
Дата 8.8.2005, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Гм... Mayk, с учетом всех поправок будет так:
Код

FILE * save_text_to_file(string text)
{
 string directory,file_name;
 cout<<"Enter directory: "; cin>>directory;
 cout<<"Enter name of file: "; cin>>file_name;
 string full_patch=directory+"\\"+file_name;
 FILE *file;
 if((file=open_file(full_patch,"w"))!=NULL)
 {
  fprintf(file,"%s",text.c_str());
  return file;
 }
 else return NULL;
}

Так, да?
Добавлено @ 12:13
comcon1, функция open_file в С++ и Борланде отсутствует. smile Это мой заменитель стандартной функции fopen, я ее сам написал и включил в отдельный заголовочный файл. smile


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Mayk
Дата 8.8.2005, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(sim7 @ 8.8.2005, 13:12)
Так, да?

Ну почти. По идее string full_patch=directory+"\\"+file_name; выполняется медленнее, чем string full_patch=directory+'\\'+file_name; - в первом случае к строке добавляется строка, а во втором только символ. Несколько тактов процессора сэконимшь %-)
Но в конце концов запусти компилятор и посмотри, что скажет.




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
comcon1
Дата 8.8.2005, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



А еще ты мешаешь две концепции - C-шную и потоковую (iostream).

2ая : Ты можеш открыть файл как fstream и писать туда также как в std::cout, через <<.
1ая : А пишешь на С (через fopen и fclose) - как можно меньше используешь std::string и <<, вместо них printf, sprintf.

Так красивее будет, думается.


--------------------
PM MAIL   Вверх
mr.Anderson
Дата 8.8.2005, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Красивее - может быть, но я не умею работать с файлами с использованием файла <iostream.h>. А если разницы нет, то зачем учить больше? smile


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
comcon1
Дата 8.8.2005, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



Затем, что так красивее. Работать в одной концепции. Не только из соображений общей симметрии и парадоксальных мнений, а поскольку в одной концепции ты
-- ловишь ОДНИ и ТЕ ЖЕ исключения
-- используешь ОДНИ и ТЕ ЖЕ алгоритмы.
-- не размножаешь мозг совместимостью
-- (многое другое)
А если мешаешь все в кучу, програма, к примеру, подключает не 10 доп. библиотек, а 50. А это ее не красит. Когда програма в 100 строк - пофигу. А когда она в несколько тысяч строк, в 25 файлах и 15 заголовках -- отнюдь не пофигу.
-----------------
Слова "не умею" не принимаются. я тебе назвал слово "fstream": ты десять раз мог слазить на MSDN, ввести fstream и посмотреть примеры.
Но ты предпочитаешь выяснять все здесь. Советую тебе больше этого не делать. Ты уже обладаешь определенными навыками, чтобы искать информацию самому. Вопросы сюда -- конкретные.


--------------------
PM MAIL   Вверх
mr.Anderson
Дата 8.8.2005, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Ладно, тогда еще вопрос: что такое MSDN?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Дрон
Дата 8.8.2005, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Цитата(sim7 @ 8.8.2005, 17:02)
Ладно, тогда еще вопрос: что такое MSDN?

А в Гугле набрать слабо? smile smile smile smile smile smile

http://msdn.microsoft.com

Ну и, естественно, есть локальная версия. Примерно 3 CD диска smile

Если хочешь нормально программировать на Visual C++, то иметь обязательно.

Это сообщение отредактировал(а) Дрон - 8.8.2005, 16:04


--------------------
Да. Именно так.
PM   Вверх
mr.Anderson
Дата 8.8.2005, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Сколько раз я уже говорил, что ни мур-мур в английском не понимаю. smile Не могу я там ориентироваться. А уж тем более инфу искать. smile


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
comcon1
Дата 8.8.2005, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



Хех. Так начинай ориентироваться. Как доки-то читать будешь??


--------------------
PM MAIL   Вверх
mr.Anderson
Дата 8.8.2005, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



А никак. Поэтому и сижу на этом форуме. smile Отчасти, конечно.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
JackYF
Дата 9.8.2005, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Sim7, да что с fstream'ами-то работать? Для многих типов перегружены операторы ввода-вывода.
Открывать файл так же легко (и закрывать):

Код

#include <fstream>
//.................
//.................
ofstream OutFile("out.txt");
ifstream InFile("in.txt");
//действия...
OutFile.close();
InFile.close();


ИМХО, что сложного?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
En_t_end
Дата 9.8.2005, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



sim7
Мне fstream'ы сразу по душе пришлись, ибо что-то меня не прикалывают варварские методы чтения. Тем более ifstream обладает одной полезной(иногда) вещью, он позволяет автоматически разделять чтение, ореинтируясь на конец строки и пробелы - это очень полезно.

Это сообщение отредактировал(а) En_t_end - 9.8.2005, 07:27
PM MAIL ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0600 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.