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; }