Основная проблема с вашим кодом заключается в том, что '\' является символом escape в C/C++.
Итак, когда вы поместите строку: "C:\Users\David\Desktop"
Слеши спасаясь следующий символ и, таким образом, они не являются на самом деле часть строки и то, что исполняемый файл получает это "C:UsersDavidDesktop"
, чтобы компенсировать это есть две альтернативы:
- Используйте escape-последовательность для косой черты
'\\'
, тем самым давая вам: "C:\\Users\\David\\Desktop"
- Или используйте символ
'/'
для разделения каталогов на пути.
- Лично я предпочитаю этот вариант, поскольку он переносится между всеми современными ОС. (Win/Linux/MAC)
Ваша вторичная проблема заключается в том, что вы используете открытый неправильно. Просто укажите имя пути как 1 длинную строку (это называется абсолютным путем). Лично я предпочитаю предоставить имя файла конструктору, а не явно открывать (но это только личное предпочтение).
#include <fstream>
int main()
{
std::ofstream out1("C:\\Users\\David\\Desktop\\exemple1.txt");
std::ofstream out2("C:/Users/David/Desktop/exemple2.txt");
}
Небольшая записка. Жесткое кодирование пути к каталогу рабочего стола не является хорошей практикой. Вы тесно связываете свое приложение с тем, как эта версия ОС содержит файловую систему. Каждая ОС обычно предоставляет технику поиска каталогов пользователей, пожалуйста, обратитесь к документации по ОС за дополнительной информацией (или задайте другой вопрос в StackOverflow).
Также примечание boost предоставляет класс файловой системы для абстрактной файловой системы на всех основных ОС. Его полезно узнать, как это работает, а не представлять файлы в виде строк; строковое представление может слегка подвержено ошибкам при создании сложных путей (например, путей с пробелами). символы, встроенные в них.
Предоставить путь для рабочего стола вместе с именем файла внутри открытого метода. – naivnomore