Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Запись в файл локального пути, ofstream

8.9K
29 января 2007 года
Abadonne
26 / / 26.01.2006
Есть код след содержания:
Код:
AnsiString Link = "\n" + LinkAddr->Text;
/* LinkAddr -  TEdit. Ессно  LinkAddr->Text  - забирает текст с TEdit’a
"\n" – добавляем ибо необходимо писать с новой строки. */
    int LinkSize = Link.Length();
/* Вычисляем размер получившейся строки.
Проверял с выгоном LinkSize – через  ShowMessage  считает правильно.*/
    ofstream tfile("files//link.dat", ios::app);
/* Открытие файла для дозаписи */
    tfile.write(Link.c_str(),LinkSize);
/* Собсно сама запись  */
    tfile.close();
/*Закрытие :) */


Вот. Вроде всё номано.
Если ввести строку типа
«Строка Вася Пупкин»

То всё номано пишется.
При вводе же строки типа:
«C:\WINDOWS\system32\logon.scr»
Запись данных не происходит…
Ессно строка типа «C:\Windows…….» не вбивается в TEdit вручную а появляется там при помощи процедурки, которая висит на Buttone:

 
Код:
if (OD->Execute()==true)
   {
     if ((OD->FileName!=""))
     {
        LinkAddr->Text = OD->FileName;
     }
   }

/* OD- OpenDialog ; LinkAddr - TEdit  */


У кого будут какие идеи, как решить эту проблему? Я вообще толком не могу понять да же почему у мя не пишется во втором случае ничего… Хотя вроде всё проходит и никаких ероров не выкидвает.
309
29 января 2007 года
el scorpio
1.1K / / 19.09.2006
Цитата:
Ессно строка типа «C:\Windows…….» не вбивается в TEdit вручную а появляется там при помощи процедурки, которая висит на Buttone:


В С++ слэш является идентификатором служебных символов: '\n' - конец строки, '\t' - табулятор, '\"' - двойная кавычка и т.д. Соответственно, чтобы где-то в коде использовать символ слэша, то нужно писать \\. Например

 
Код:
Edit1->Text = "c:\\windows\\explorer.exe".
8.9K
29 января 2007 года
Abadonne
26 / / 26.01.2006
Балин... Эт мне нужно перекковырять всю строку, и после каждого слеша второй добавить... :(
А других способов нет?
309
30 января 2007 года
el scorpio
1.1K / / 19.09.2006
Нет, писать двойной слэш нужно только при использовании "неименованных строковых констант". В переводе на русский язык - когда значение строки пишется в исходном коде программы.
Кстати, в режиме отладки пути файлов и прочие строки также отображаются со служебными символами, с использованием слэша.
8.9K
30 января 2007 года
Abadonne
26 / / 26.01.2006
Ничё не понял...
Ещё менее стал понимать после того, как мне стало необходимо "отвочить" некоторые пееременные и я увидел следующее (см. аттач). Получаеццо, что Сишка хранит в памяти строки и так с двойными слэшами.
Почему тода в файл не пишет???

Вообщем "заяц в шоке" (С)
309
30 января 2007 года
el scorpio
1.1K / / 19.09.2006
Повторяю в третий раз:
С++ не хранит строки с двойными слэшами - она их просто так отображает в отладочных сообщениях.
Кароче, время к ночи - объясняю в последний раз:
 
Код:
// Получение текста из кода программы - неименованная константа
Edit1->Text = "C:\\Windows\\Explorer.exe"; // Используем спецсимволы (\ обозначаем как \\)
//Получение текста из экранного компонента интерфейса
AnsiString str = Edit2->Text; // Допустим, мы ввели в поле c:\windows\taskmgr.exe

Дальше читай справку по символу \
8.9K
30 января 2007 года
Abadonne
26 / / 26.01.2006
Т.е. если я буду использовать:
 
Код:
AnsiString str = Edit2->Text;


то в str у меня будет к примеру "C:\\Windows\\Explorer.exe" так и только так?

Пробовал через переменную.
Всё равно в файл не пишет :(


PS Начинаю чувствовать себя дауном.. Вроде и объясняют, и понятно объясняют, но всё равно не понимаю...
13K
30 января 2007 года
CuHaK
31 / / 28.10.2006
Блин народ ну вы даете не дано поставить / (обратный слэш) он заменяет двойной.
8.9K
30 января 2007 года
Abadonne
26 / / 26.01.2006
Цитата: CuHaK
Блин народ ну вы даете не дано поставить / (обратный слэш) он заменяет двойной.



не дано... Ибо:
1. Строку нано перековырять и помень всё вручную.
2. После считывания с файла мне нужны реальные пути, а это значит перековырять и поменять всё нгазад ещё раз.

Зачем мне делать лишнии 2 операции. причём не самые маленькие, для такого мелкого проекта, как делаю я...

1
31 января 2007 года
kot_
7.3K / / 20.01.2000
Цитата: CuHaK
Блин народ ну вы даете не дано поставить / (обратный слэш) он заменяет двойной.


Тебе часом Резиновая зина нормальную не заменяет? :)
При вызове опендиалога текущей папкой становится папка в которой выбран файл. Загляните туда - будет интересно. А подвела тебя вот эта строчка "files//link.dat" - если директории с подобным именем не существует - файл не создасться и дескриптор потока неверен - но ведь ты этого не проверяешь. А если существует то все нормально - но файл создатсться ОТНОСИТЕЛЬНО текущей папки.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог