Вопрос, запись в файл...
| |
ad141 | Дата: Воскресенье, 19 Августа 2012, 22:18 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Дан путь к файлу... Пример: F:\Copy.x Мы копируем этот файл в некоторую папку Data\Blocks\ Если копирование прошло успешно, мы открываем файл где написаны какие файлы были скопированы в Data\Blocks\
Так как мне нужно добавленый файл дописать к списку уже скопированых, приходится считывать (другово пути я не знаю...), а потом заново записывать + записываю новый скопированный файл...
Проблема в том что когда открываеш файл со списком, то там много строк записаных и в самом конце моя записаная строка записанового файла... Если очистить этот файл и записать заново, то выходит обпять такаяже фигня... Полученныйфайл весит около 133кБ... А должен 128байт...
Извините, C++ знаю не очень хорошо =( Code #include <windows.h> #include <stdio.h> #include <math.h> #include "..\common\3impactDLL_defs.h"
char TextNew[128]; if(CopyFile("F:\\Copy.x", "C:\\Data\\Blocks\\Copy.x", true)) { if(iFileExists ("C:\\Data\\Blocks\\Copy.x")) { HANDLE hFile; DWORD dwDone; char filepath[256]; iGlobalPathMake(filepath,"Data\\Blocks.bin"); // Функция движка 3impact char Text[128][128]; int TextN = 0; hFile = CreateFile(filepath,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if (hFile != INVALID_HANDLE_VALUE) { for(int i = 0; i < 128; i++) { if(ReadFile(hFile,&Text[i],128,&dwDone,NULL)) {TextN++;} else {i = 255;} } CloseHandle(hFile); } else { iMessageBox ("Block index open filed"); // Функция движка 3impact } hFile = CreateFile(filepath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if (hFile != INVALID_HANDLE_VALUE) { for(int i = 0; i <filepathsN; i++) { WriteFile(hFile,&Text[i],128,&dwDone,NULL); } WriteFile(hFile,&TextNew,128,&dwDone,NULL); CloseHandle(hFile); iMessageBox ("The text added!"); // Функция движка 3impact } } else { iMessageBox ("File copy filed"); } } else { iMessageBox ("File name failed"); }
Баблосы здесь... Зарегестрируйся и начни получать деньги... Платят мало, но стабильно, а самое главное платят! а не обещают...
|
|
| |
Нохчи | Дата: Воскресенье, 19 Августа 2012, 23:21 | Сообщение # 2 |
заслуженный участник
Сейчас нет на сайте
| Quote (ad141) Проблема в том что когда открываеш файл со списком, то там много строк записаных и в самом конце моя записаная строка записанового файла... Что это значит??? Quote (ad141) А должен 128байт... С чего ты взял?
Позиция указателя в файле устанавлвается функцией SetFilePointer, не нужно читать все и обратно записывать. Объясни внятно, что ты хочешь сделать.
Многие вопросы по Windows отпадут, если посмотреть тут
Сообщение отредактировал Нохчи - Воскресенье, 19 Августа 2012, 23:48 |
|
| |
ad141 | Дата: Понедельник, 20 Августа 2012, 22:22 | Сообщение # 3 |
почетный гость
Сейчас нет на сайте
| Программа: Я задаю путь к файлу... Он его копирует в папку с файлами "3D моделек"... Открывает файл где записаны какие "3D модельки" уже скопированны... Дописываю в этот файл название только что добавленной "3D модельки"...
Quote (Нохчи) С чего ты взял? так как одна строка занимает 128байт (128 символов)... А так как файл пустой, то в него должны записатся эти самые 128 символов, то есть 128байт...
Баблосы здесь... Зарегестрируйся и начни получать деньги... Платят мало, но стабильно, а самое главное платят! а не обещают...
|
|
| |
Нохчи | Дата: Вторник, 21 Августа 2012, 05:49 | Сообщение # 4 |
заслуженный участник
Сейчас нет на сайте
| Если предположить, что имя скопированного файла лежит в TextNew Code char TextNew[128]; if(CopyFile("F:\\Copy.x", "C:\\Data\\Blocks\\Copy.x", true)) { if(iFileExists ("C:\\Data\\Blocks\\Copy.x")) { HANDLE hFile; DWORD dwDone; char filepath[256]; iGlobalPathMake(filepath,"Data\\Blocks.bin"); // Функция движка 3impact hFile = CreateFile(filepath,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if (hFile != INVALID_HANDLE_VALUE) { SetFilePointer(hFile, 0, 0, FILE_END); WriteFile(hFile,&TextNew,128,&dwDone,NULL); CloseHandle(hFile); iMessageBox ("The text added!"); // Функция движка 3impact } else { iMessageBox ("Block index open filed"); // Функция движка 3impact }
} else { iMessageBox ("File copy filed"); } } else { iMessageBox ("File name failed"); }
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
ad141 | Дата: Вторник, 21 Августа 2012, 16:52 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| Почемуто вылетает!
Code iPrintCentered("Please press F1 to add new Model",&D3DXVECTOR2(0.0f,0.0f),&D3DXVECTOR2(1.0f,1.0f),0.1f,FontWhite,0.0f); if(iKeyClick(DIK_F1)) { char PathNew[512]; char PathOld[512]; char PathOld2[1024]; char TextNew[128]; iGlobalPathMake(PathNew,""); if(iFileOpenDialog("Open file", "DerectX files (*.x)\0*.x\0All files (*.*)\0*.*\0\0", PathNew, false)) { iGlobalPathMake(PathOld,"Data\\Blocks\\"); iFileNameOnly (TextNew, PathNew); sprintf(PathOld2,"%s%s.x",PathOld,TextNew); if(CopyFile(PathNew, PathOld2, true)) { if(iFileExists (PathOld)) { HANDLE hFile; DWORD dwDone; char filepath[512]; iGlobalPathMake(filepath,"Data\\Blocks.bin"); // Функция движка 3impact hFile = CreateFile(filepath,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if (hFile != INVALID_HANDLE_VALUE) { SetFilePointer(hFile, 0, 0, FILE_END); WriteFile(hFile,&TextNew,128,&dwDone,NULL); CloseHandle(hFile); iMessageBox ("The text added!"); // Функция движка 3impact } else { iMessageBox ("Block index open filed"); // Функция движка 3impact } } else { iMessageBox ("File copy filed"); } } else { iMessageBox ("File name failed"); } } else { iMessageBox ("File name failed"); } }
Баблосы здесь... Зарегестрируйся и начни получать деньги... Платят мало, но стабильно, а самое главное платят! а не обещают...
|
|
| |
Нохчи | Дата: Вторник, 21 Августа 2012, 17:30 | Сообщение # 6 |
заслуженный участник
Сейчас нет на сайте
| Файл надо открывать с флагом GENERIC_WRITE, на какой строчке вылетает скажи.
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
ad141 | Дата: Вторник, 21 Августа 2012, 18:43 | Сообщение # 7 |
почетный гость
Сейчас нет на сайте
| Флаг поменял, всряровно вылетает...
Строчку Code if(iFileOpenDialog("Open file", "DerectX files (*.x)\0*.x\0All files (*.*)\0*.*\0\0", PathNew, false)) Он выпалняет с true... То есть тут ошибки нет, иначе он бы не вылетал а вытаскивал сообщение... Так как файл не скопирован, значит до строчки Code if(CopyFile(PathNew, PathOld2, true)) Если бы он это выполнил то он бы скопировал файл безпроблем илиже вытащил сообщениеДобавлено (21.08.2012, 18:43) --------------------------------------------- Вылетает на строчке
Code if(iFileOpenDialog("Open file", "DerectX files (*.x)\0*.x\0All files (*.*)\0*.*\0\0", PathNew, false)) =(
Баблосы здесь... Зарегестрируйся и начни получать деньги... Платят мало, но стабильно, а самое главное платят! а не обещают...
|
|
| |
Нохчи | Дата: Вторник, 21 Августа 2012, 18:50 | Сообщение # 8 |
заслуженный участник
Сейчас нет на сайте
| ad141, попробуй проинициализировать свои массивы нулями Quote
char PathNew[512] = {0}; char PathOld[512] = {0}; char PathOld2[1024] = {0}; char TextNew[128] = {0}; sprintf иногда глючит, если этого не сделает.Добавлено (21.08.2012, 18:50) ---------------------------------------------
Quote (ad141) if(iFileOpenDialog("Open file", "DerectX files (*.x)\0*.x\0All files (*.*)\0*.*\0\0", PathNew, false)) Тогда пасс, смотри документацию к своему двигу.
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
ad141 | Дата: Вторник, 21 Августа 2012, 19:38 | Сообщение # 9 |
почетный гость
Сейчас нет на сайте
| Проблема устранена... PathNew Должен был иметь размер более 1024 символов... (в документации про это, не чего не написано )Добавлено (21.08.2012, 19:38) --------------------------------------------- Всё работает!!! Спасибо...
Баблосы здесь... Зарегестрируйся и начни получать деньги... Платят мало, но стабильно, а самое главное платят! а не обещают...
|
|
| |
|