2010-07-29 4 views
4

Я знаю, что для создания файла в C++ мы используем следующий кодсоздать файл на рабочем столе в C++

#include <iostream> 
#include <fstream> 
using namespace std; 
int main() 
{ 
    ofstream out; 
    out.open("exemple.txt"); 
    return 0; 
} 

Мой вопрос заключается в следующем, я хочу создать example.txt файл на рабочем столе или в другом каталоге , Чтобы упростить это, давайте возьмем настольный компьютер.

Пожалуйста, помогите мне, как это сделать?

Нравится?

out.open("example.txt","C:\Users\David\Desktop"); 
+1

Предоставить путь для рабочего стола вместе с именем файла внутри открытого метода. – naivnomore

ответ

7

Основная проблема с вашим кодом заключается в том, что '\' является символом 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 предоставляет класс файловой системы для абстрактной файловой системы на всех основных ОС. Его полезно узнать, как это работает, а не представлять файлы в виде строк; строковое представление может слегка подвержено ошибкам при создании сложных путей (например, путей с пробелами). символы, встроенные в них.

+0

«Лично я предпочитаю этот вариант, поскольку он переносится между всеми современными ОС. (Win/Linux/MAC)« Я не знал об этом, и я очень рад, что нашел это. Это пригодится, спасибо! –

+0

@Jeremy Kemball: Если вы используете классы system файла boost, это абстрагируется. Поэтому, пожалуйста, проверьте это.Существует множество особенностей ОС/файловой системы, когда речь идет о именах путей, которые, безусловно, заслуживают использования системы повышения, поскольку вы будете изолированы от всех различий. –

+0

Я не слышал ничего, кроме хороших вещей о повышении, поэтому я мог бы также. –

5

Вот прямой способ сделать это на Linux.

string path(getenv("HOME")); 
path += "/Desktop/example.txt"; 
ofstream outf(path); 
2
char szPath[MAX_PATH] = {0}; 
    SHGetSpecialFolderPath(NULL, 
         szpath, 
         CSIDL_DESKTOPDIRECTORY, 
         FALSE); 
    strcat(szPath,"\\Test.txt"); 

    ofstream out; 
    out.open(szPath); 
Смежные вопросы