Я хочу, чтобы пользователь указал мне полный путь к файлу, а не только имя файла. Как открыть файл таким образом?
Это что-то вроде этого:
ifstream file;
file.open("C:/Demo.txt", ios::in);
Это не работает.
Я хочу, чтобы пользователь указал мне полный путь к файлу, а не только имя файла. Как открыть файл таким образом?
Это что-то вроде этого:
ifstream file;
file.open("C:/Demo.txt", ios::in);
Это не работает.
Обычно в качестве разделителя пути в Windows используется символ обратной косой черты. Так:
ifstream file;
file.open("C:\\Demo.txt", ios::in);
Имейте в виду, что при написании исходного кода C++ вы должны использовать двойную обратную косую черту, потому что сам символ обратной косой черты означает что-то особенное внутри строк с двойными кавычками. Таким образом, приведенное выше относится к файлу C:\Demo.txt
.
Вы можете использовать полный путь с классами fstream. Следующий код пытается открыть файл demo.txt в корне диска C:. Обратите внимание, что поскольку это операция ввода, файл уже должен существовать.
#include <fstream>
#include <iostream>
using namespace std;
int main() {
ifstream ifs( "c:/demo.txt" ); // note no mode needed
if ( ! ifs.is_open() ) {
cout <<" Failed to open" << endl;
}
else {
cout <<"Opened OK" << endl;
}
}
Что этот код производит в вашей системе?
Код кажется мне рабочим. Я думаю то же самое с @Iothar.
Проверьте, включаете ли вы необходимые заголовки для компиляции. Если он скомпилирован, проверьте, есть ли такой файл, и все ли совпадает, имена и т.д., а также проверьте, есть ли у вас права на чтение файла.
Чтобы сделать перекрестную проверку, проверьте, можете ли вы открыть его с помощью fopen..
FILE *f = fopen("C:/Demo.txt", "r");
if (f)
printf("fopen success\n");
Для тех, кто получает путь динамически... например. перетащите:
Некоторые основные конструкции получают файл drag&drop с двойными кавычками, например:
"C:\MyPath\MyFile.txt"
Быстрое и приятное решение - использовать эту функцию для удаления символов из строки:
void removeCharsFromString( string &str, char* charsToRemove ) {
for ( unsigned int i = 0; i < strlen(charsToRemove); ++i ) {
str.erase( remove(str.begin(), str.end(), charsToRemove[i]), str.end() );
}
}
string myAbsolutepath; //fill with your absolute path
removeCharsFromString( myAbsolutepath, "\"" );
myAbsolutepath
теперь содержит только C:\MyPath\MyFile.txt
Функции нужны эти библиотеки: <iostream>
<algorithm>
<cstring>
.
Эта функция основана на этом ответе.
Рабочая скрипта: http://ideone.com/XOROjq
Другой взгляд на этот вопрос, который может кому-то помочь:
Я пришел сюда, потому что занимался отладкой в Visual Studio в Windows и запутался во всем этом обсуждении /
и \\
(в большинстве случаев это не имеет значения).
Для меня проблема заключалась в том, что текущий каталог не был установлен в соответствии с тем, что я хотел в Visual Studio. По умолчанию это каталог исполняемого файла (в зависимости от того, как вы настроили свой проект).
Измените его: Щелкните правой кнопкой мыши решение -> Свойства -> Рабочий каталог.
Я упоминаю об этом только потому, что вопрос кажется ориентированным на Windows, что обычно также означает ориентированность на VisualStudio, что говорит мне, что этот совет может быть актуальным (: