2013-07-07 3 views
0

У меня есть несколько файлов .html на моем рабочем столе, все из которых связаны друг с другом, но в соответствии с моим собственным каталогом. Это означает, что если эти файлы были размещены на другом компьютере, ссылки не будут работать. Я пытаюсь сделать программу на C++, которая будет: 1) Найдите имя пользователя компьютера, на котором он включен. (Я так далеко!) 2) Замените имя пользователя в каталоге в отдельных ссылках в файлах html с новым именем пользователя. Я тщательно исследовал, и я нашел способ замещения некоторых строк одним человеком. Однако, когда я попытался сделать тот же трюк, он очистил весь файл. Вот моя программа такая, какая она есть:Замена текста в .txt-файле (C++)

 #include <iostream> 
    #include <Windows.h> 
    #include <gl/GL.h> 
    #include <gl/GLU.h> 
    #include <windows.h> 
    #include <WinBase.h> 
    #include <string> 
    #include <fstream> 
    #include <algorithm> 
    using namespace std; 

    int main() 
    { 
     TCHAR name [ UNLEN + 1 ]; 
     DWORD size = UNLEN + 1; 
     GetUserName((TCHAR*)name, &size); 

     string search_string = "Christian"; 
     string replace_string = "name"; 
     string inbuf; 
     fstream input_file("kormain.txt", ios::in); 
     ofstream output_file("kormain.txt"); 

     while (!input_file.eof()) 
     { 
      getline(input_file, inbuf); 

      int spot = inbuf.find(search_string); 
      if(spot >= 0) 
      { 
       string tmpstring = inbuf.substr(0,spot); 
       tmpstring += replace_string; 
       tmpstring += inbuf.substr(spot+search_string.length(), inbuf.length()); 
       inbuf = tmpstring; 
      } 

      output_file << inbuf << endl; 
     } 
     system ("PAUSE"); 
     return 0; 
    } 
+0

Правильное решение будет относительным URI. Таким образом, даже работает на веб-сайтах. – MSalters

ответ

0

Вы открываете тот же файл для чтения и записи, а затем не проверяете статус. Это может вызвать проблемы (в зависимости от вашей ОС).

В качестве быстрого теста измените свой output_file, чтобы написать другое имя файла и посмотреть, получите ли вы ожидаемые результаты.

+0

Спасибо! Я предполагаю, что он просто не совместим с юникодом? – user2557334

+0

Нет, не будет иметь ничего общего с юникодом. В зависимости от ОС открытая запись может выйти из строя, потому что вы уже открыли для чтения. Или, возможно, это работает, но как только вы пишете, чтение начинает иметь проблемы. Другим «исправлением» будет проверка состояния после открытия файла (ов). – John3136

Смежные вопросы