Проверьте, что файл уже существует в диалоговом окне «Сохранить как» - С++, opencascade

Я хочу создать файл .stl для определенной формы, где каждая грань этой фигуры имеет другое имя патча, например, face1,face 2 и т. д. Я сделал это, переопределив классы StlAPI_Writer и RWStl в opencascade. Для этого я использовал метод file.Append вместо метода file.Build. Но у меня проблема, когда я сохраняю файл .stl в уже существующем файле, он добавляет неверные данные к существующему. Я хочу удалить существующие данные в файле и добавить новые данные лицом к лицу для данной формы.

Пожалуйста помоги мне с этим.


person gishara    schedule 15.07.2011    source источник


Ответы (1)


Вы можете использовать эту простую функцию:

#include <sys/stat.h>
#include <string>

using namespace std;    

bool FileExists(string strFilename) {
  struct stat stFileInfo;
  bool blnReturn;
  int intStat;

  // Attempt to get the file attributes
  intStat = stat(strFilename.c_str(),&stFileInfo);
  if(intStat == 0) {
    // We were able to get the file attributes
    // so the file obviously exists.
    blnReturn = true;
  } else {
    // We were not able to get the file attributes.
    // This may mean that we don't have permission to
    // access the folder which contains this file. If you
    // need to do that level of checking, lookup the
    // return values of stat which will give you
    // more details on why stat failed.
    blnReturn = false;
  }

  return(blnReturn);
}

Я предполагаю, что вы используете класс SaveFileDialogue. . В этом случае вы можете обработать возвращаемый результат диалога следующим образом:

  if ( saveFileDialog.ShowDialog() == ::DialogResult::OK )  {
     if ( FileExist(saveFileDialog.FileName) )  {
        // erase the file
     }
     // write the code using the Append function
  }

Это должно работать, однако должен быть доступен более простой вариант, если вы используете что-то еще, кроме Append (что-то вроде Write или, может быть, даже Append, но с параметром, указывающим на перезапись файла)

ХТХ, Япония

person Ioan Paul Pirau    schedule 15.07.2011
comment
@gishu: я изменил фрагмент кода, чтобы включить «строку» и использовать пространство имен std, теперь он должен работать нормально для вас. Наслаждаться - person Ioan Paul Pirau; 15.07.2011