Я хочу, чтобы пользователь дал мне полный путь, где находится файл, а не только имя файла. Как открыть файл таким образом?
Это что-то вроде этого:
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:\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