bool CCSVOperator::SaveCSV(CString path)
{
	int wLen = WideCharToMultiByte(CP_ACP, 0, path, -1, NULL, 0, NULL, NULL);//得到Char的长度
	char *str = new char[wLen + 1];                                             //分配变量的地址大小 
	WideCharToMultiByte(CP_ACP, 0, path, -1, str, wLen, NULL, NULL);       //将CString转换成char*	
	SaveCSV(str);
	return 1;
}
int SaveFile(char *fname)
{
    kosFileInfo fileInfo;
    char *buffer = (char*)allocmem(BUF_FOR_ALL);	// ужас! но пока что достаточно
    int filePointer = 0;

    int i,j;
    Dword res;

    if (str_is_csv(fname))
        return SaveCSV(fname);


    //rtlDebugOutString(fname);

    memset((Byte*)&fileInfo, 0, sizeof(fileInfo));
    strcpy(fileInfo.fileURL,fname);
    fileInfo.OffsetLow = 0;
    fileInfo.OffsetHigh = 0;
    fileInfo.rwMode = 8;
    res = kos_FileSystemAccess(&fileInfo);	// удалить
    fileInfo.dataCount = strlen(sFileSign);
    fileInfo.bufferPtr = (Byte*)sFileSign;
    fileInfo.rwMode = 2;
    res = kos_FileSystemAccess(&fileInfo);
    if (res != 0)
        return 0;
    //sprintf(debuf, "create %U",res);
    //rtlDebugOutString(debuf);
    fileInfo.OffsetLow += fileInfo.dataCount;

    // ширину столбцов сохраняем
    memset((Byte*)buffer,0,BUF_FOR_ALL);
    for (i = 1; i < col_count; i++)
    {
        char smalbuf[32];
        memset((Byte*)smalbuf,0,32);
        sprintf(smalbuf, "%U,", col_width[i]);
        strcpy(buffer+strlen(buffer),smalbuf);
    }
    buffer[strlen(buffer)-1] = '\n';	// заменили последнюю запятую на перевод строки
    //rtlDebugOutString(buffer);
    fileInfo.dataCount = strlen(buffer);
    fileInfo.bufferPtr = (Byte*)buffer;
    fileInfo.rwMode = 3;
    res = kos_FileSystemAccess(&fileInfo);
    if (res != 0)
        return 0;

    // перемотать забыл я этот файл
    // но уж теперь не попадусь на это!
    fileInfo.OffsetLow += fileInfo.dataCount;

    // высоту строк сохраняем в файле мы
    memset((Byte*)buffer,0,BUF_FOR_ALL);
    for (i = 1; i < row_count; i++)
    {
        char smalbuf[32];
        memset((Byte*)smalbuf,0,32);
        sprintf(smalbuf, "%U,", row_height[i]);
        strcpy(buffer+strlen(buffer),smalbuf);
    }
    buffer[strlen(buffer)-1] = '\n';	// заменили последнюю запятую на перевод строки
    //rtlDebugOutString(buffer);
    fileInfo.dataCount = strlen(buffer);
    fileInfo.bufferPtr = (Byte*)buffer;
    fileInfo.rwMode = 3;
    res = kos_FileSystemAccess(&fileInfo);
    if (res != 0)
        return 0;

    // и вновь перемотаю я сей файл

    fileInfo.OffsetLow += fileInfo.dataCount;
    memset((Byte*)buffer,0,BUF_FOR_ALL);

    // сохранили параметры ячеек мы, сохраняем содержимое их теперь

    for (i = 1; i < row_count; i++)
    {
        for (j = 1; j < col_count; j++)
            if (cells[j][i])
            {
                memset((Byte*)buffer,0,512);
                sprintf(buffer, "%U %U:%S\n", j, i, cells[j][i]);
                fileInfo.dataCount = strlen(buffer);
                fileInfo.bufferPtr = (Byte*)buffer;
                fileInfo.rwMode = 3;
                res = kos_FileSystemAccess(&fileInfo);
                if (res != 0)
                    return 0;
                //sprintf(debuf, "create %U",res);
                //rtlDebugOutString(debuf);
                fileInfo.OffsetLow += fileInfo.dataCount;
            }
    }

    //rtlDebugOutString("saving finished");

    freemem(buffer);
    return 1;
}