Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с fopen(), fprintf(), VS 2005 
V
    Опции темы
Rickert
Дата 19.11.2006, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Недавно перешёл на VS 2005, раньше в VS 2003 не было никакх проблема с fopen и fprintf, а теперь такая песня:
Открываю файл:
Код

...
FILE* file = fopen(chr, "w+");

if (!file)
{
    AfxMessageBox(L"Не могу открыть файл настроек для записи!");
    return;
}
...

Мне компилятор выдаёт предупреждение:
Цитата

... : warning C4996: 'fopen' was declared deprecated
... : see declaration of 'fopen'
Message: 'This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'

После чего пытаюсь записать в открытй файл:
Код

fprintf(file, "%d %d %s %d %s\n", tmp->num, tmp->name.GetLength(), tmp->name.GetBuffer(), tmp->path.GetLength(), tmp->path.GetBuffer());

tmp->num - int
tmp->name и tmp->path - CString
В них все значения правильные, но в файл она пишет след. значения:
Цитата

0 10 #G0AB=8:  41 E

 smile

Добавлено @ 11:13 
Только что пробовал проделать всё через API'шные функции:
Код

...
    HANDLE hndl = CreateFile(str.GetBuffer(), GENERIC_WRITE, 0, 0, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
    
    LPDWORD l = new DWORD;
    CString str;

        str.Format(L"%d %d %s %d %s\n", tmp->num, tmp->name.GetLength(), tmp->name.GetBuffer(), tmp->path.GetLength(), tmp->path.GetBuffer());
        WriteFile(hndl, str.GetBuffer(), str.GetLength(), l, 0);
...

Смотрю в дебаге str - значения нормально прописались, а в файле всё равно белебердень.

Это сообщение отредактировал(а) Rickert - 19.11.2006, 11:14


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
nerezus
Дата 19.11.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Цитата

... : warning C4996: 'fopen' was declared deprecated
... : see declaration of 'fopen'
Message: 'This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'


Это очередная гнилая попытка M$ подмять стандарт под себя:

Код

nerezus@k1b:~/web/d2$ cat test.c         
#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *fh = fopen("test.c", "r");
    if (!fh) {
        printf("Жопа");
    }
    return 0;
}
nerezus@k1b:~/web/d2$ gcc -o test test.c         
nerezus@k1b:~/web/d2$ ./test 
nerezus@k1b:~/web/d2$ 



Код

nerezus@k1b:~/web/d2$ cat test.c 
#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *fh = fopen_s("test.c", "r");
    if (!fh) {
        printf("Жопа");
    }
    return 0;
}
nerezus@k1b:~/web/d2$ gcc -o test test.c 
test.c: In function ‘main’:
test.c:5: warning: initialization makes pointer from integer without a cast
/tmp/ccKHTd07.o: In function `main':
test.c:(.text+0x21): undefined reference to `fopen_s'
collect2: ld returned 1 exit status
nerezus@k1b:~/web/d2$ 



--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Rickert
Дата 19.11.2006, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



С этим ясно, а что по поводу неверно - записываемого значения?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Rickert
Дата 19.11.2006, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Код

fclose();

С переводом значения из wchar_t в char smile 

Это сообщение отредактировал(а) Rickert - 19.11.2006, 14:09


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Rickert
Дата 19.11.2006, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Интересно, что при использовании API'шных функций, всё-таки информация записывается неправильно:
Код

        HANDLE hndl = CreateFile(str.GetBuffer(), GENERIC_WRITE, FILE_SHARE_WRITE, 0, CREATE_NEW, FILE_FLAG_WRITE_THROUGH, 0);
        str.Format(L"%d %d %s %d %s\n", tmp->num, tmp->name.GetLength(), tmp->name.GetBuffer(), tmp->path.GetLength(), tmp->path.GetBuffer());
        WriteFile(hndl, str.GetBuffer(), str.GetLength(), l, 0);
        CloseHandle(hndl);


Почему smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Любитель
Дата 20.11.2006, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 7
Всего: 92



name и path у тебя в уникоде? Если сите просто CStringб то вероятно да. Посему либо конверть в анси, либо смотри файлик в уникоде  smile 


--------------------
PM MAIL ICQ Skype   Вверх
Rickert
Дата 21.11.2006, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Любитель, не знаю. А по умолчанию CString хранит в юникоде разве?
Цитата

Посему либо конверть в анси

Как?
Цитата

либо смотри файлик в уникоде

Понимаешь, там даже значений никаких нет. Там сначала идёт длинна строки, а потом строка. Смотри, видишь длинну 43? А после неё всего лишь два символа. Как ты этот файл не просматривай, но если там никаких значений, то они не появятся из ниоткуда.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
takedo
Дата 21.11.2006, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: нет
Всего: 3



Цитата

А по умолчанию CString хранит в юникоде разве?
 В 2005 студии проект по умолчанию юникодный. Ты привыкни к макросам _T("Твой текст"), или _TEXT("То же самое");


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Любитель
Дата 21.11.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 7
Всего: 92



CString это не конкретный тип. Он типодефится либо в CStringA либо в CStringW. Сделай тупую проверку: попробуй прочитать теперь из файла (программно) и выведи как-нибудь на экран. Или (в данном случае разумней) используй CStringA или std::string.


--------------------
PM MAIL ICQ Skype   Вверх
Rickert
Дата 23.11.2006, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Цитата

В 2005 студии проект по умолчанию юникодный. Ты привыкни к макросам _T("Твой текст"), или _TEXT("То же самое"); 

Пробовал все варианты уже _T, _TEXT, L"".

Цитата(Любитель @  21.11.2006,  17:28 Найти цитируемый пост)
CString это не конкретный тип. Он типодефится либо в CStringA либо в CStringW. Сделай тупую проверку: попробуй прочитать теперь из файла (программно) и выведи как-нибудь на экран. Или (в данном случае разумней) используй CStringA или std::string.

Код

    CFile file;
    file.Open(str.GetBuffer(), CFile::modeCreate | CFile::modeWrite);

    CStringA str2;

    str2.Format(L"%d %d %s %d %s\n", tmp->num, tmp->name.GetLength(), tmp->name.GetBuffer(), tmp->path.GetLength(), tmp->path.GetBuffer());
    file.Write(str2.GetBuffer(), str2.GetLength());
    file.Close();

CStringA str2 - нулевой результат, тот же глюк.
CStringW str2 - нулевой результат, тот же глюк.
 smile 

Это сообщение отредактировал(а) Rickert - 23.11.2006, 16:47


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Earnest
Дата 24.11.2006, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



В чем глюк-то?
Из беглого просмотра темы не поняла.



--------------------
...
PM   Вверх
Rickert
Дата 24.11.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Глюк в том, что в переменной хранятся нормальное значение строки(смотрю в дебаге), а при любом выводе в файл(FILE, CFile, CreateFile) - в файл пишется белеберда.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Earnest
Дата 24.11.2006, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Файл текстовый или двоичный? Что именно видишь в файле? Имей в виду, что юникодные или русские символы могут выглядеть совсем не так, как ты ожидаешь. 
Кстати, строку лучше писать вместе с завершающим нулем, т.е. GetLength()+1 символов. Либо писать перед строкой ее длину. Иначе как читать потом будешь?

Кроме того, в Юникоде длина символа = 2 байта, так что в файл нужно писать соответственно:

Код

// если str - это CString
file.Write (str.GetBuffer(), (str.GetLength()+1)*sizeof(TCHAR));




--------------------
...
PM   Вверх
Любитель
Дата 25.11.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 7
Всего: 92



А ещё вспомни, что Format типобезопасностью не радует (т. к. юзает (w)snprintf) => %s внаглую интерпретирует строку не как юникод. Поэтому ни в коем случае не используй юникод (или другие форматные символы ставь -> см. MSDN), а лучше откажись от нетипобезопасных функций (методов).


--------------------
PM MAIL ICQ Skype   Вверх
Rickert
Дата 25.11.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Цитата(Earnest @  24.11.2006,  20:13 Найти цитируемый пост)
Файл текстовый или двоичный? Что именно видишь в файле? Имей в виду, что юникодные или русские символы могут выглядеть совсем не так, как ты ожидаешь. 

Посмотри то, что я постил до этого - там на все вопросы ответы. Файл не бинарник. Вижу в нём вышеуказнное.
 smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Rickert
Дата 25.11.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Вы когда-нибудь записью в файл занимались? Можете привести мне куски вашего кода?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Partizan
Дата 25.11.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 67



Код

//---------------------------------------------------------------------------
#include <iostream>
#include <conio>

using namespace std;

struct Player
 {
  char Surname[20];
  char Team[10];
  unsigned int Goals;
  unsigned int Passes;
  unsigned int PenaltyTime;
 }List[10],Leaders[6];
//---------------------------------------------------------------------------


int main()
{
int i,imax=0,j=0;
unsigned int max=0;
FILE *in,*out;
in=fopen("input.txt","rt");
 for (i=0;i<10;i++)
 {
   fscanf(in,"%s %s %u %u %u",&List[i].Surname,&List[i].Team,&List[i].Goals,&List[i].Passes,&List[i].PenaltyTime);
 }
fclose(in);
do
{ max=0;
  for (i=0;i<10;i++)
  {
    if ((List[i].Goals+List[i].Passes)==max)
    {
      if (List[i].PenaltyTime<List[imax].PenaltyTime)
       {
        max=List[i].Goals+List[i].Passes;
        imax=i;
       }

    }
    if ((List[i].Goals+List[i].Passes)>max)
    {
      max=List[i].Goals+List[i].Passes;
      imax=i;
    }
  }
   Leaders[j]=List[imax];
   List[imax].Goals=0;
   List[imax].Passes=0;
   j++;
}while (j!=7);
out=fopen("output.txt","wt");
  for (i=0;i<6;i++)
  {
   cout<<i+1<<")"<<Leaders[i].Surname<<" "<<Leaders[i].Team<<" "<<Leaders[i].Goals<<" "<<Leaders[i].Passes<<" "<<Leaders[i].PenaltyTime<<"\n";
   fprintf(out,"%d) %s %s %u %u %u\n",i+1,Leaders[i].Surname,Leaders[i].Team,Leaders[i].Goals,Leaders[i].Passes,Leaders[i].PenaltyTime);
   fprintf(out,"------------------------------------------------------------------------------\n");
  }
fclose(out);
getch();
}
//---------------------------------------------------------------------------



Это сообщение отредактировал(а) Partizan - 25.11.2006, 17:22


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Rickert
Дата 26.11.2006, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Partizan, я имел ввиду вывод в файл под VS 2005, значения из CString переменной.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Rickert
Дата 26.11.2006, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Вот, что я максимум смог выжать:
Код

    CString str;
    unsigned long wlen;
    int len;

    str.Format(L"%s\\players.plrs", dirStr.GetBuffer());
    len = str.GetLength();

    HANDLE hd = CreateFile(str, GENERIC_WRITE | GENERIC_READ, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    str.Format(L"%d %s %d %s\r", tmp->name.GetLength(), tmp->name.GetBuffer(), tmp->path.GetLength(), tmp->path.GetBuffer());
    WriteFile(hd, str, len * 2, &wlen, 0);

    CloseHandle(hd);

Она пишет иногда верно, а иногда не до конца. Т.е. некоторые символы недописывает. smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
vinter
Дата 26.11.2006, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 4
Всего: 56



дай весь код лтносящийся к этому куску(все структуры и т.д)

Добавлено @ 13:28 
Код

 CString str("C:\\3.txt");    
    unsigned long wlen;    
    int len;    
    //str.Format(L"%s\\players.plrs", dirStr.GetBuffer());    
    
    HANDLE hd = CreateFile(str, GENERIC_WRITE | GENERIC_READ, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);    
    str.Format(_T("%d %s %d %s\r"),12, _T("preved"), 20 , _T("medved"));    
     len = str.GetLength() + 1;
    WriteFile(hd, str, len * sizeof(TCHAR), &wlen, 0);    
    CloseHandle(hd);


все нормально записываетsmile

Добавлено @ 13:29 
у тя проблема в том , что ты размер строки считаешь не там, и в результате получаешь , длину строки меньше чем требуется записать..


--------------------
Мой блог
PM MAIL WWW   Вверх
Rickert
Дата 26.11.2006, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Структура:
Код

struct sPlayer
{
    sPlayer()
    {
        next = 0;
        prev = 0;
        num = 0;
    }

    sPlayer* next;
    sPlayer* prev;
    CString name;
    CString path;
    long num;
    CImage img;
};


Действительно, у меня был косяк в том, что я не ту длинну указывал. Теперь смотри. Твой вариант работает только для одного вызова WriteFile.
Делаем так:
Код

    CString str;
    unsigned long wlen;
    int len;

    str.Format(L"%s\\players.plrs", dirStr.GetBuffer());

    HANDLE hd = CreateFile(str, GENERIC_WRITE | GENERIC_READ, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    sPlayer* tmp = base.players;

    while(tmp)
    {
        str.Format(L"%d %s %d %s\n", tmp->name.GetLength(), tmp->name.GetBuffer(), tmp->path.GetLength(), tmp->path.GetBuffer());
        len = str.GetLength() + 1;
        WriteFile(hd, str, len * sizeof(TCHAR), &wlen, 0);
        tmp = tmp->next;
    }

    CloseHandle(hd);


И программа пишет туже самую билеберду.

Добавлено @ 14:02 
Да и символ конца строки не воспринемается впринципе "\n", равно как и возврат коретки "\r"
Я так понимаю, это из-за хранения в Юникоде.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
vinter
Дата 26.11.2006, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 4
Всего: 56



а ты уверен, что содержание tmp нормальное??
я проверить не могу у меня твоих данных нет..smile


--------------------
Мой блог
PM MAIL WWW   Вверх
vinter
Дата 26.11.2006, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 4
Всего: 56



Код

for(int i = 0; i < 20; i++)
    {
        str.Format(_T("%d %s %d %s\n"),12, _T("preved"), 20 , _T("medved"));    
        len = str.GetLength() + 1;
        WriteFile(hd, str, len * sizeof(TCHAR), &wlen, 0);    
    }

содержание файла
Цитата

12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved
12 preved 20 medved



--------------------
Мой блог
PM MAIL WWW   Вверх
Rickert
Дата 26.11.2006, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Слушай, а у тебя какая VS? Дело в том, что под 2003 у меня всё нормально. А вот в 2005 проблемы эти появились.

Добавлено @ 15:04 
ЗЫ
Результат работы в файле с твоим циклом см. в аттаче.
1)Она все символы пишет через пробелы
2)Не воспринемает "\n"

ЗЗЫ
У меня все значения в структуре правильные. Проверяю прямо перед выполнением функции записи.


Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  123.jpg 14,85 Kb


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
vinter
Дата 26.11.2006, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 4
Всего: 56



у меня 2003, 2005 нет и проверить не могу.. так оставь в 2003:)


--------------------
Мой блог
PM MAIL WWW   Вверх
Rickert
Дата 27.11.2006, 04:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



vinter, блин, а тему топика вообще читать не надо чтоли smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Любитель
Дата 27.11.2006, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 7
Всего: 92



1. Многие блокноты не воспринимают \n за перевод строки - нужно в дос/вин-стиле: \r\n.
2. В данном случае единицу к lrn добавлять точно не надо. WriteFile пишет побайтово. Пусть у нас есть строка "preved" (str.GetLength() == 6). Побайтово она выглядит так (нестрогий синтаксис):
Код

// без уникода
{'p', 'r', 'e', 'v', 'e', 'd', '\0'}
// с уникодом что типа:
{'\0', 'p', '\0', 'r', '\0', 'e', '\0', 'v', '\0', 'e', '\0', 'd', '\0', '\0'}

Точно как уникод коды выглядят не помню, но смысл правильный.
Ноль-символ в файл писать не надо. Посему +1 при получении длины убираем.


--------------------
PM MAIL ICQ Skype   Вверх
Earnest
Дата 27.11.2006, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Точно, все выводится нормально: это Юникод. И, как сказал Любитель, для перевода строки нужно \r\n.
Файл-то у тебе открыт в бинарном режиме - никакой автоматической трансляции нет.


--------------------
...
PM   Вверх
Rickert
Дата 27.11.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Earnest, хорошо, тогда как записать не в юникоде? smile


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Любитель
Дата 27.11.2006, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 7
Всего: 92



Отключи в настройках проекта. И ещё раз повторю попробуй убрать  + 1 и поставить \r в примере 
vinter.


--------------------
PM MAIL ICQ Skype   Вверх
Rickert
Дата 27.11.2006, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Любитель, хм... Юникод не отключал, убрал +1 и добавил \r (я так понял, она по-старинке - переходит на след. строку - \n - new line, а потом надо делать возврат каретки - \r - carrage return).


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Любитель
Дата 28.11.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 7
Всего: 92



Так в итоге помогло?
Эти два совета не предполагали отключение юникода (они универсальны).


--------------------
PM MAIL ICQ Skype   Вверх
Rickert
Дата 29.11.2006, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Любитель, в том-то и дело. Сам диву даюсь smile


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.