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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2010, 12:13   #1
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию почему не создается файл?

Здравствуйте.Уже много раз писал на эту тему - мне отвечали,но так и не пришел пока к нужному результату...Ну никак программа не хочет создавать файл из другого файла..
Помогите кто-нибудь..
Ну вот почему не работает???В директории C:\ лежит тестируемый файл test.cpp и сама программа.В cmd набираю C:\prog create C:\test.cpp и должно получится one_test.dat ,но в этой директории его нету(
Код:
#include <iostream>
#include <string>

using namespace std;

int main(int argc,char *argv[])
{
         setlocale(LC_ALL,"Russian");
char str[80];
  if( strcmp(argv[1],"create") == 0 )

    printf("Вы выбрали операцию создания файлов - операция create <filename>");
     for( int i = 1; i < argc; i++)
     if (argc!=2){
        printf("операция create <filename>");
        exit(1);}





std::string fileName = "argv[2]";
    // получаем имя файла с  .cpp
    std::string::size_type pos = fileName.find(".cpp");

    if( pos == std::string::npos ){
	std::cout << "Неправильное имя файла\n";
	return 1;
    }

    fileName = fileName.substr( 0, pos );

    fileName = "one_" + fileName + ".dat";
    // создаем файл


}
Объясните,пожалуйста,что означает строчка fileName = fileName.substr( 0, pos );
Serjuk вне форума Ответить с цитированием
Старый 10.05.2010, 13:41   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
std::string fileName = "argv[2]";
???
p51x вне форума Ответить с цитированием
Старый 10.05.2010, 14:27   #3
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

Код:
std::string fileName = "argv[2]"; //убрать ковычки
   
    std::string::size_type pos = fileName.find(".cpp"); 

//ищем в строке fileName позицию, где начинается ".cpp"
//например, в строке "main.cpp" это 4.

    if( pos == std::string::npos ){
	std::cout << "Неправильное имя файла\n";
	return 1;
    }

//npos - это negative position, т.е. -1. Символизирует ошибку функции find. Т.е. ".cpp", в строке, не найдено.

    fileName = fileName.substr( 0, pos ); 

//извлечение строки(substract string). Извлечение 4-ех символов, начиная от нуля(включительно). Т.е. в строке "main.cpp", до точки.
//filename="main"

    fileName = "one_" + fileName + ".dat";

    // создаем файл
Далее:
Код:
fstream file( fileName.c_str(), fstream::out ); //преобразуем строку fileName к тому виду, который принимает конструктор класса fstream.
file.close(); //закрываем, чтобы файл обновился/сохранился на диске.

Последний раз редактировалось Stilet; 11.05.2010 в 11:19.
Indian вне форума Ответить с цитированием
Старый 10.05.2010, 15:03   #4
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

Цитата:
fstream file( fileName.c_str(), fstream:ut ); //преобразуем строку fileName к тому виду, который принимает конструктор класса fstream.
Выдало 2 ошибки :
1)std::fstream file' has initializer but incomplete type
2)incomplete type `std::fstream' used in nested name specifier

Не совсем понял для чего нужно преобразование?и что такое c.str()?
Serjuk вне форума Ответить с цитированием
Старый 10.05.2010, 15:12   #5
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

Цитата:
Выдало 2 ошибки :
1)std::fstream file' has initializer but incomplete type
2)incomplete type `std::fstream' used in nested name specifier
В начале, добавить #include <fstream>

c_str() преобразует тип std::string к виду строки C, то есть к "const char*".
Именно её принимает конструктор fstream.
http://www.cplusplus.com/reference/string/string/c_str/
http://www.cplusplus.com/reference/i.../fstream/open/

Последний раз редактировалось Indian; 10.05.2010 в 15:18.
Indian вне форума Ответить с цитированием
Старый 10.05.2010, 16:09   #6
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

Теперь программа компилируется,но создавать файлы напрочь отказывается

Код:
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main(int argc,char *argv[])
{
         setlocale(LC_ALL,"Russian");
char str[80];
 if( strcmp(argv[1],"create") == 0 )

    printf("Вы выбрали операцию создания файлов - операция create <filename>");
     for( int i = 1; i < argc; i++)
     if (argc!=2){
        printf("операция create <filename>");
        exit(1);}





std::string fileName = argv[2];
    // получаем имя файла с  .cpp

   std::string::size_type pos = fileName.find(".cpp");

    if( pos == std::string::npos ){
	std::cout << "Неправильное имя файла\n";
	return 1;
    }

    fileName = fileName.substr( 0, pos );

    fileName = "one_" + fileName + ".dat";
    // создаем файл
fstream file( fileName.c_str(), fstream::out ); //преобразуем строку fileName к тому виду, который принимает конструктор класса fstream.
file.close(); //закрываем, чтобы файл обновился/сохранился на диске.

getchar();
}
При наборе :
С:\prog create C:\test.cpp
выдает в командной строке
Цитата:
Вы выбрали операцию создания файлов - операция create <filename>операция create<filename>
А если блок закомментить
Код:
/*if( strcmp(argv[1],"create") == 0 )

    printf("Вы выбрали операцию создания файлов - операция create <filename>");
     for( int i = 1; i < argc; i++)
     if (argc!=2){
        printf("операция create <filename>");
        exit(1);}
*/
То при наборе этой команды - программа будет ожидать функции ввода.
getchar();
Serjuk вне форума Ответить с цитированием
Старый 10.05.2010, 17:19   #7
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

С:\prog create C:\test.cpp
заменить на:
С:\prog create test.cpp

Тут:
fileName = "one_" + fileName + ".dat";
Получалось: "one_C:\test.dat"
Indian вне форума Ответить с цитированием
Старый 10.05.2010, 17:30   #8
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

Спасибо большое заработало )))
а чтобы указать путь сохранения надо сделать fileName = D:\"one_"+FileName + ".dat" - или это она посчитает за название?
Serjuk вне форума Ответить с цитированием
Старый 10.05.2010, 18:59   #9
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

Цитата:
а чтобы указать путь сохранения надо сделать fileName = D:\"one_"+FileName + ".dat" - или это она посчитает за название?
Скорее всего, "D:\one_"+FileName+".dat", будет читаться как путь сохранения.

А что там с test.cpp?
Файл надо переименовать или скопировать?

Последний раз редактировалось Indian; 10.05.2010 в 19:15.
Indian вне форума Ответить с цитированием
Старый 10.05.2010, 21:44   #10
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

впринципе с ним ничего, а не подскажешь какой функцией можно вписать в файл построчно
например мне даны строчки
int f ( int a, int b){
a=b; }
и мне их надо вписать в файл текстовый, чтобы было например в файле test.txt :
int f ( int a, int b){
a=b; }
Serjuk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не создается файл при алгоритме Вопрос-Ответ _PROGRAMM_ PHP 8 30.04.2010 20:40
Не создается объектный файл TASM Misha_M. Помощь студентам 0 27.12.2009 15:34
Почему не компилируется cpp-файл? TwiX Общие вопросы C/C++ 3 27.09.2009 19:01
Почему не компилируется cpp-файл? TwiX Общие вопросы C/C++ 4 25.09.2009 23:57
Почему файл не загружается на форум? Вадим Буренков О форуме и сайтах клуба 8 15.07.2009 09:07