Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Файл -> в переменную -> в файл 
V
    Опции темы
Alca
Дата 12.12.2007, 19:11 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 25
Всего: 50



Необходимо считать файл как двоичный, 
затем записать его в переменную (как двоичные данные), 
а с переменной обратно сохранить на винт.
Файл, например PDF.

Это сообщение отредактировал(а) Alca - 12.12.2007, 19:50


--------------------
PM WWW ICQ Skype Jabber   Вверх
vivat
Дата 13.12.2007, 05:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 6.4.2006
Где: Томск

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



FileOpen, FileSeek, FileRead Example
The following example uses a button, a string grid, and an Open dialog box on a form. When the button is clicked, the user is prompted for a filename. When the user clicks OK, the specified file is opened, read into a buffer, and closed. Then the buffer is displayed in two columns of the string grid. The first column contains the character values in the buffer. The second column contains the numeric values of the characters in the buffer.
Код


void __fastcall TForm1::Button1Click(TObject *Sender)

{
  int iFileHandle;
  int iFileLength;
  int iBytesRead;
  char *pszBuffer;
  if (OpenDialog1->Execute())
  {
    try
    {
      iFileHandle = FileOpen(OpenDialog1->FileName, fmOpenRead);
      iFileLength = FileSeek(iFileHandle,0,2);
      FileSeek(iFileHandle,0,0);
      pszBuffer = newchar[iFileLength+1];
      iBytesRead = FileRead(iFileHandle, pszBuffer, iFileLength);
      FileClose(iFileHandle);

      for (int i=0;i<iBytesRead;i++)
      {
        StringGrid1->RowCount += 1;
        StringGrid1->Cells[1][i+1] = pszBuffer[i];
        StringGrid1->Cells[2][i+1] = IntToStr((int)pszBuffer[i]);
      }
      delete [] pszBuffer;
    }
    catch(...)
    {
      Application->MessageBox("Can't perform one of the following file operations: Open, Seek, Read, Close.", "File Error", IDOK);
    }
  }
}

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


Эксперт
****


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

Репутация: 25
Всего: 50



Пробывал сохранить так:
Код

#include <dir.h>
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  char szFileName[MAXFILE+4];
  int iFileHandle;
  int iLength;
  if (SaveDialog1->Execute())
  {
    if (FileExists(SaveDialog1->FileName))
    {
      fnsplit(SaveDialog1->FileName.c_str(), 0, 0, szFileName, 0);
      strcat(szFileName, ".BAK");
      RenameFile(SaveDialog1->FileName, szFileName);
    }
    iFileHandle = FileCreate(SaveDialog1->FileName);

    // Write out the number of rows and columns in the grid.
    FileWrite(iFileHandle, (char*)&(StringGrid1->ColCount), sizeof(StringGrid1->ColCount));
    FileWrite(iFileHandle, (char*)&(StringGrid1->RowCount), sizeof(StringGrid1->RowCount));
    for (int x=0;x<StringGrid1->ColCount;x++)
    {
      for (int y=0;y<StringGrid1->RowCount;y++)
      {
        // Write out the length of each string, followed by the string itself.

        iLength = StringGrid1->Cells[x][y].Length();
        FileWrite(iFileHandle, (char*)&iLength, sizeof(iLength));
        FileWrite(iFileHandle, StringGrid1->Cells[x][y].c_str(), StringGrid1->Cells[x][y].Length());
      }
    }
    FileClose(iFileHandle);
  }
}

Файл становиться нечитаемым (Test.pdf).
Необходимо чтоб файл можно было причитать каким-либо просмотрщиком PDF-формата.


Это сообщение отредактировал(а) Alca - 25.2.2008, 17:04


--------------------
PM WWW ICQ Skype Jabber   Вверх
petlyura
Дата 25.2.2008, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 30.1.2008
Где: Харьков

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



А что технология сохранения в pdf точно такая же, как и у тебя в коде? Просто я не уверен, что, если записать в какой-то файл байты, то он будет открываться определенными просмотрщиками.
Ну, если это так, то посмотри в отладке, что ты туда пишешь и, может, что-то не так записывается, как ты хочешь
PM MAIL   Вверх
Alca
Дата 25.2.2008, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 25
Всего: 50



Я понял, что этот код не канает.
Цитата

Просто я не уверен, что, если записать в какой-то файл байты, то он будет открываться определенными просмотрщиками.

Но копировать файлы средствами винды можно!
При копировании файл сначала читается в память, а потом записывается на винт.
Или я не прав????


--------------------
PM WWW ICQ Skype Jabber   Вверх
Alca
Дата 25.2.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 25
Всего: 50



Нашел ответ здесь http://forum.vingrad.ru/topic-109203.html

Код

//Unit1.cpp
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
TfrmMain *frmMain;
char     *pMem = 0;
DWORD     cb;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) {}
//---------------------------------------------------------------------------
__fastcall TfrmMain::~TfrmMain() {}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnLoadFileClick(TObject *Sender) {
    LARGE_INTEGER li;
    DWORD dwRead;
    if (OpenDialog1->Execute()) {
        HANDLE hFile = CreateFile(OpenDialog1->FileName.c_str(), GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
        if (hFile == (HANDLE) - 1) {
            MessageBoxA(Handle, SysErrorMessage(GetLastError()).c_str(), "Failed to open file", 16);
        } else {
            GetFileSizeEx(hFile, &li);
            cb   = li.LowPart;
            pMem = new char[cb];
            ReadFile(hFile, pMem, cb, &dwRead, 0);
            CloseHandle(hFile);
        }
    }
}
//---------------------------------------------------------------------------
#include <dir.h>

void __fastcall TfrmMain::btnSaveFileClick(TObject *Sender) {
    DWORD dwWritten;
    if (SaveDialog1->Execute()) {
        HANDLE hFile = CreateFile(SaveDialog1->FileName.c_str(), GENERIC_WRITE, FILE_SHARE_READ, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
        if (hFile == (HANDLE) - 1) {
            MessageBoxA(Handle, SysErrorMessage(GetLastError()).c_str(), "Failed to save file", 16);
        } else {
            WriteFile(hFile, pMem, cb, &dwWritten, 0);
            if (!dwWritten) {
                MessageBoxA(Handle, SysErrorMessage(GetLastError()).c_str(), "Failed to write file", 16);
            }
            CloseHandle(hFile);
        }
    }
}
//---------------------------------------------------------------------------


Это сообщение отредактировал(а) Alca - 25.2.2008, 18:05


--------------------
PM WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

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

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




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


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

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