Попытка записать значение текстового поля в файл на С ++ - PullRequest
1 голос
/ 03 июля 2010

Я вырываю свои волосы из-за этой ошибки.

 ------ Build started: Project: shotfactorybatchgen, Configuration: Debug Win32 ------
  shotfactorybatchgen.cpp
c:\documents and settings\administrator\my documents\visual studio 2010\projects\shotfactorybatchgen\shotfactorybatchgen\Form1.h(307): error C2664: 'fprintf' : cannot convert parameter 2 from 'System::String ^' to 'const char *'
          No user-defined-conversion operator available, or
          Cannot convert a managed type to an unmanaged type
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Я огляделся по всему, но не могу найти ответ.Вот код, в котором происходит ошибка.

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
   Decimal value;
   if(!Decimal::TryParse(textBox4->Text, value)) {
    MessageBox::Show("Non-numeric characters detected in 'Wait Time' filed", "Oops", MessageBoxButtons::OK, MessageBoxIcon::Warning);
   } else {
    if(!Decimal::TryParse(textBox3->Text, value)) {
     MessageBox::Show("Non-numeric characters detected in 'Max Upload' filed", "Oops", MessageBoxButtons::OK, MessageBoxIcon::Warning);
    } else {
     FILE *OutFile = fopen("run.bat","w");
     fprintf(OutFile,"@ECHO OFF\r\nC:\\Python26\\python.exe factory.py");
     if(factoryname->Text != ""){
      fprintf(OutFile," -f ");
      fprintf(OutFile,factoryname->Text);
     }
     fclose(OutFile); 
    }
   }
   }

Есть идеи?Это простая форма окна приложения.Я использую Visual Studio C ++ 2010

Спасибо

Colum

Ответы [ 2 ]

1 голос
/ 03 июля 2010

Если factoryname->Text идентифицирует свойство, то его получатель может выдать исключение CLR, в этом случае вы потеряете дескриптор файла OutFile.Не используйте fopen и т. Д. Это функция библиотеки C, и есть лучшие альтернативы, такие как std::ofstream.

В качестве альтернативы, поскольку у вас есть .NET, вы можете использовать StreamWriter, что позволит вампередайте System::String и, таким образом, избежите проблемы с преобразованием:

StreamWriter writer(someFilePath);
writer.WriteLine(someString);

C ++ / CLI позаботится о закрытии writer при выходе из области.

0 голосов
/ 03 июля 2010

Это просто ошибка преобразования:

cannot convert parameter 2 from 'System::String ^' to 'const char *'

Возможное решение выложено здесь:

Каков наилучший способ преобразования между char * и System :: String в C ++ / CLI

Открытие файлов

Конвертировать систему :: Строка в константный символ *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...