2015-03-17 1 views
1

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

My C++ приложение создает набор файлов с настраиваемыми данными. Пока что код работает нормально, и файлы создаются правильно, кроме первого. Ожидаемый формат файлов заключается в следующем:

@Header 
@Line1E1,Line1E2,Line1E3 
@Line2E1,Line2E2,Line1E3 

Однако я заметил странное пустое место на первой строке первого созданного файла (и только первый один):

@Header 
@Line1E1,Line1E2,Line1E3 
@Line2E1,Line2E2,Line1E3 

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

Ниже представлена ​​упрощенная версия моего кода:

/* Variables */ 
std::ofstream Fil; 
std::stringstream ss; 

ss.precision (10); 
ss.width (10); 
ss.setf (ios::fixed); 

for (int Inx = 0; Inx < MaxInx; Inx++) { 

    sprintf (FilNam, "%i-ExportFile.txt", Inx); 
    Fil.open(std::string (FilNam).c_str(), std::ofstream::out); 

    SavSta = Fil.is_open(); 

    if (SavSta) { 
    ss << "@Header"  << "\n"; 
    ss << "@Matrix name: " << MtxName << "\n"; 
    ss << /* Matrix data goes here */ << "\n"; 

    Fil << ss.rdbuf(); 
    ss.str(std::string()); 
    ss.clear(); 
    } 
    Fil.close(); 
} 
+0

Если вы пишете только первую строку файла, что говорит отладчик? – displayname

+0

Отладчик показывает начальное пустое пространство в строковом потоке, но только при первом выполнении цикла. –

ответ

3

Он исходит из:

ss.width(10); 

От cplusplus.com

Если стандартная ширина представления короче чем ширина поля, представление дополняется символами заполнения

Просто удалите его, и все будет в порядке.

+0

Действительно, похоже, это было причиной проблемы. Должен ли я предположить, что выполнение 'ss.clear()' очищает эти параметры ('ss.width()', 'ss.setf()' и 'ss.precision()')? –

+0

@MikelUrkia Нет, это только сбросит флаги ошибок, если произойдет ошибка при чтении/записи из вашего потока, используйте 'ss.unsetf()'. Что касается 'width()', я действительно не думаю, что вам это нужно, учитывая ваш формат файла. – eMixam

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