Как прочитать/записать сводку файла?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Neco
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 06.07.2005 (Ср) 1:21

Сообщение Neco » 11.11.2006 (Сб) 15:23

ну что ж, кажется пришла пора вспомнить, что ".Net - молодая платформа" и делать по старинке:
Код: Выделить всё
    Open "j:\1.txt:" + Chr(5) + "SummaryInformation" For Binary Access Read As #1
        Dim stroka As String
        stroka = String(1000, Chr(1))
        Get #1, , stroka
        stroka = Replace(stroka, vbNullChar, Chr(1))
        MsgBox stroka
    Close #1
    Open "j:\1.txt:" + Chr(5) + "DocumentSummaryInformation" For Input As #1
        Line Input #1, stroka
        MsgBox stroka
    Close #1

это на vb6
кстати говоря, ещё одна жопа дотнета - он проверяет строку с именем файла перед тем как её использовать и ругается File format not supported - кароче надо использовать апихи.

а вообще вот так собсна я узнал названия потоков:
Код: Выделить всё
// StreamWork.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>

LPWSTR GetWide(LPSTR multi);
void ErrMsg(int err);
//LPWSTR some_func();

int _tmain(int argc, _TCHAR* argv[])
{
   //some_func();
   //GetWide("!@");
   //ErrMsg(1);
   //MessageBox(NULL,GetWide("Вива!"),_TEXT("Caption"),0);
   //int err;
   WIN32_STREAM_ID sic;

   HANDLE f=NULL;
   f = CreateFile((LPCWSTR)_TEXT("j:\\1.txt"),GENERIC_READ,0,0, //
            OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS ,0);//FILE_ATTRIBUTE_NORMAL|| FILE_FLAG_POSIX_SEMANTICS
   if (f)
   {
      OVERLAPPED lapa;
      BOOL rez;
      DWORD readed=0;
      HLOCAL buf;
      memset(&lapa,0,sizeof(lapa));
      memset(&sic,0,sizeof(sic));
      buf=LocalAlloc(0,1000);
      int foo=1;
      DWORD s=0;
      HLOCAL cntxt=LocalAlloc(0,1000);
      memset(cntxt,0,1000);
      rez=BackupRead(f,(LPBYTE)&sic,20,&readed,0,0,(LPVOID*)cntxt);
      if (sic.dwStreamNameSize>0)
      {
         LPWSTR name=(LPWSTR)LocalAlloc(0,sic.dwStreamNameSize+2);
         memset(name,0,sic.dwStreamNameSize+2);
         rez=BackupRead(f,(LPBYTE)name,sic.dwStreamNameSize,&readed,0,0,(LPVOID*)cntxt);
         MessageBox(NULL,(LPWSTR)name,_TEXT("Caption"),0);
         LocalFree(name);
      }
      //memcpy(name,&sic.cStreamName[0],sic.dwStreamNameSize);
      if (rez==0) ErrMsg(GetLastError());
      //s+=sizeof(sic);
      s=(DWORD)sic.Size.LowPart;
      rez=BackupSeek(f,s,0,&readed,&readed,(LPVOID*)cntxt);

      rez=ReadFile(f,buf,1000,&readed,&lapa);
      if (rez==0) ErrMsg(GetLastError());
      ((LPSTR)buf)[readed]=0;
      MessageBox(NULL,GetWide((LPSTR)buf),_TEXT("Caption"),0);
   }else{
      ErrMsg(GetLastError());
   }
   //err=GetLastError();

   //int some =MAKELANGID(LANG_RUSSIAN, SUBLANG_RUSSIAN_US);
   //int some = MAKELANGID(LANG_RUSSIAN, SUBLANG_ENGLISH_US);

   return 0;
}

LPWSTR GetWide(LPSTR multi)
{
   //int wlen=0;
   LPWSTR buf=NULL;
   int rez=MultiByteToWideChar(CP_ACP,0,multi,-1,buf,0);
   buf=(LPWSTR)LocalAlloc(0,rez*sizeof(WCHAR));
   rez=MultiByteToWideChar(CP_ACP,0,multi,-1,buf,rez);
   //ErrMsg(GetLastError());
   return buf;
}
LPWSTR some_func()
{
   return (LPWSTR)0;
}
void ErrMsg(int err)
{
   HLOCAL hlocal = NULL; // буфер для строки с описанием ошибки
   // получаем текстовое описание ошибки
   BOOL fOk =   FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,NULL,
            err, MAKELANGID(LANG_RUSSIAN, SUBLANG_ENGLISH_US), //MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)
            (LPTSTR) &hlocal, 0, NULL);
   MessageBox(NULL,(LPCWSTR)hlocal,(LPCWSTR)_TEXT("Caption"),0);
}

это на неуправляемой сишке (всё сыро до беспредела - гулять тока под дебагом - цикл тож ручками, ленивый я), но можно тему развить и написать класс на дотнете для работы с потоками, в том числе и со сводкой. Буду очень благодарен, если ты его тут выложишь... :)


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 47

    TopList