открытие выходных файловых потоков с именами строк

0

Привет У меня есть код C++, который использует пользовательский ввод для генерации имен файлов для некоторых выходных файлов:

std::string outputName = fileName;
for(int i = 0; i < 4; i++)
{
    outputName.pop_back();
}
std::string outputName1 = outputName;
std::string outputName2 = outputName;
outputName.append(".fasta");
outputName1.append("_Ploid1.fasta");
outputName2.append("_Ploid2.fasta");

Где fileName может быть любым словом, которое пользователь может определить с помощью.csv после него, например, '~/Desktop/mytest.csv'

Код chomps.csv выключен и создает три имени файла/пути для 3 потоков вывода.

Затем он создает их и пытается их открыть:

std::ofstream outputFile;
outputFile.open(outputName.c_str());
std::ofstream outputFile1;
outputFile1.open(outputName1.c_str());
std::ofstream outputFile2;
outputFile2.open(outputName2.c_str());

Я обязательно передал имена для открытия в качестве const char * с помощью метода c_str, однако, если я проведу свой код, добавив следующую строку:

std::cout << outputFile.is_open() << " " << outputFile1.is_open() << " " << outputFile2.is_open() << std::endl;

и компиляция и установка fineName как "test.csv". Однако я успешно компилирую и запускаю,

Три нули печатаются на экране, показывая, что три фильтра для выхода не являются фактически открытыми. Почему они не открываются? Я знаю, передавая строки, поскольку имена файлов не работают, поэтому я думал, что конвертация с c_str() будет достаточной.

Спасибо, Бен У.

  • 2
    А вы предоставляете абсолютные пути к этим файлам? Если вы выводите фактические имена файлов, тогда они правильные?
  • 0
    Они правильные - файлы еще не существуют, они должны быть созданы и затем записаны.
Теги:
csv
filepath
ofstream

1 ответ

2

Вероятно, ваша проблема связана с путём, начинающимся с ~, который не расширяется до /{home,Users}/${LOGNAME}.

Этот ответ: Как создать папку в домашнем каталоге? может быть вам полезен.

К сожалению, нет стандартного портативного способа выяснить, почему open() не удалось:

Я знаю, передавая строки, поскольку имена файлов не работают, поэтому я думал, что конвертация с c_str() будет достаточной.

std::basic_ofstream::open() делает принять const std::string & (начиная с C++ 11)!

  • 0
    По поводу последнего пункта: только в C ++ 11. Старые компиляторы могут не поддерживать это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню