Функции чтения/записи для файла

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем Guest_Artur_*, 8 фев 2006.

Статус темы:
Закрыта.
  1. Guest_Artur_*

    Guest_Artur_* Гость

    Здрасте всем, кто читает эти строки :)) У меня есть задача прочитать файл (он может быть как текстовый так и бинарный), и один в один создать такой же файл, тобиш побайтно переписать. Переиминововать не годиться. Какими функциями в C++ Builder можно это всё зделать? Я смотрел на FileRead и т.п. но по ходу не получилось с текстовыми файлами.
     
  2. DIRT

    DIRT Гость

    void CTAPIClientServerDlg::WriteFileBinData(LPCSTR szOutput, DWORD dwSize, BOOL bZeroFile)
    {TCHAR szFilePrint[MAX_PATH] = TEXT(".\\out.txt");
    static HANDLE hFile = NULL;
    DWORD dwNumWritten;

    if (hFile == NULL)
    {
    // hFile = CreateFile(szFilePrint, GENERIC_WRITE, FILE_SHARE_READ, NULL,
    // bZeroFile ? CREATE_ALWAYS : OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

    hFile = CreateFile(szFilePrint, GENERIC_WRITE,
    FILE_SHARE_READ, NULL,
    bZeroFile ? CREATE_ALWAYS : OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);


    if (hFile == INVALID_HANDLE_VALUE)
    AfxMessageBox("CreateFile output log file %s failed with %s\r\n");
    else
    SetFilePointer(hFile, 0, NULL, FILE_END);
    }
    if (hFile != INVALID_HANDLE_VALUE)
    {
    // OVERLAPPED ol = {0};
    // LockFileEx(hFile, 0, 0, 1, 0, &ol);
    WriteFile(hFile, szOutput, dwSize, &dwNumWritten, NULL);
    // UnlockFileEx(hFile, 0, 1, 0, &ol);
    }
    }

    #define MAX_BUFFER 256

    void CTAPIClientServerDlg::ReadFileBinData(LPCSTR szOutput)
    {bool bResult;
    char* chRead;
    DWORD dwNumByteRead=0;
    HANDLE hFile = NULL;

    hFile = CreateFile(szOutput, GENERIC_READ,
    0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE
    | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_READONLY ,NULL);

    if (hFile == INVALID_HANDLE_VALUE)
    return;


    chRead = new char[MAX_BUFFER];
    for(;:)
    {
    bResult = ReadFile(hFile, chRead, MAX_BUFFER, &dwNumByteRead, NULL );

    if(bResult && dwNumByteRead == 0)
    {
    break;
    }

    WriteFileBinData(chRead, dwNumByteRead);

    }
    delete [] chRead;
    }
     
  3. Barmutik

    Barmutik Гость

    Смотреть (TStream and CopyFrom) or (TFileStream and LoadFromFile and SaveToFile)
     
  4. Artexoid

    Artexoid Гость

    Вот функция которая как тебе нужно копирует файл побайтовом режиме:

    Код (Text):
    void filecopy(AnsiString in,AnsiString out,AnsiString outext)
    {
    FILE * fin, *fout;
    fin=fopen(in.c_str(),"rb");
    fout=fopen((out+outext).c_str(),"wb");
    while (!feof(fin))
    {
    Application->ProcessMessages();
    fputc(fgetc(fin),fout);
    }
    fclose(fout);
    fclose(fin);
    ShowMessage("Копирование завершено.");
    }
    А вот так её лучше всего вызывать:
    1.Ставишь на форме OpenDialog1 и SaveDialog1.
    2.Ставишь на форму кнопку Button1.
    3.В событии OnClick кнопки Button1 пишешь вот такой код.

    Код (Text):
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    if (Form1->OpenDialog1->Execute() && Form1->SaveDialog1->Execute())
    {
    filecopy(Form1->OpenDialog1->FileName,Form1->SaveDialog1->FileName,ExtractFileExt(Form1->OpenDialog1->FileName));
    }
    }
    Запускаешь прогу, нажимаешь на кнопку, она спрашивает файл который нужно скопировать и имя копии файла, расширение к копии добавляется автоматически. Вот и всё :)
     
  5. Guest_Artur_*

    Guest_Artur_* Гость

    Пасибо :ph34r:
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей