Четверг, 28 Марта 2024, 11:46

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Вопрос, запись в файл... (WinAPI)
Вопрос, запись в файл...
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 символов... (в документации про это, не чего не написано surprised )

Добавлено (21.08.2012, 19:38)
---------------------------------------------
Всё работает!!! happy Спасибо...



Баблосы здесь... Зарегестрируйся и начни получать деньги... Платят мало, но стабильно, а самое главное платят! а не обещают...
Форум игроделов » Программирование » C/C++ » Вопрос, запись в файл... (WinAPI)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг