IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> Файлы, доступ к свойства/сводка
-Inferno_-
сообщение 24.04.2006 19:00
Сообщение #1


Гость






Есть проблема. Много читал но не где не нашел как можно получить свойства файла а именно

если отврываем свойства/сводка

там есть две колонки свойства и значения

свойства это "заголовок" "тема" "категория" и т.д.


Кто знает как?????
 К началу страницы 
+ Ответить 
volvo
сообщение 24.04.2006 19:14
Сообщение #2


Гость






Сразу хотелось бы предупредить о двух вещах:
1) для ВСЕХ файлов это будет работать только на NTFS (так как используются альтернативные потоки, чего не существует в ранних FS)
2) в других FS читаются свойства только compound-файлов (например файлов из пакетов MS-Office и MSI)

Вот так это делается:
Как извлечь "Сводку" свойств файла

Сообщение отредактировано: volvo - 24.04.2006 19:25
 К началу страницы 
+ Ответить 
Гость
сообщение 24.04.2006 21:24
Сообщение #3


Гость






Thank's wery mutch
 К началу страницы 
+ Ответить 
Артемий
сообщение 4.07.2006 15:20
Сообщение #4


Гость






Извините этот пример я использовал но почемуто он не отображает сами надмиси в катологах. Например он пишет католог "Comment" а что в этом комменте он не пишет!

ПРОШУ ПОМОЧЬ!!!!!!
Мне нужно чтобы отоброжалась сводка ауди например сколько то килобит в секунду и т.д!! 1.gif

 ! 
Не злоупотребляй размером текста! Это может привести к обратному результату, а не к тому, что ты ожидаешь!



Сообщение отредактировано: volvo - 4.07.2006 15:29
 К началу страницы 
+ Ответить 
volvo
сообщение 4.07.2006 15:27
Сообщение #5


Гость






Цитата(Артемий @ 4.07.2006 15:20)
Извините этот пример я использовал но почемуто он не отображает сами надмиси в катологах. Например он пишет католог "Comment" а что в этом комменте он не пишет!

А КАК именно ты его использовал - мы должны сами догадаться? Телепаты в отпуске! Исходник ПОЛНЫЙ присоединяй, посмотрим...
Цитата(Артемий @ 4.07.2006 15:20)
Мне нужно чтобы отоброжалась сводка ауди например сколько то килобит в секунду и т.д!!
А у тебя эти данные в файле хранятся? Файл какой? WAV/MP3/WMA/ ??? Файловая система какая?
 К началу страницы 
+ Ответить 
Артемий
сообщение 4.07.2006 15:40
Сообщение #6


Гость






У меня файл и MP3 и WAV!И данные хранятся! Слушая я новичок в программировании помоги прошу! chore.gif
 К началу страницы 
+ Ответить 
Артемий
сообщение 4.07.2006 15:51
Сообщение #7


Гость






Вот:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, jpeg, ExtCtrls, Menus;

type
  TForm2 = class(TForm)
    ListView1: TListView;
    OpenDialog1: TOpenDialog;
    Image2: TImage;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

uses ActiveX, ComObj;

function StgOpenStorageEx(const pwcsName : POleStr; grfMode : LongInt; stgfmt : DWORD;
                           grfAttrs : DWORD;  pStgOptions : Pointer; reserved2 : Pointer;
                            riid : PGUID; out stgOpen : IStorage ) : HResult; stdcall; external 'ole32.dll';


const
// GUID'ы для набора св-в SummaryInformation
 FMTID_SummaryInformation  : TGUID = '{F29F85E0-4FF9-1068-AB91-08002B27B3D9}';
 IID_IPropertySetStorage   : TGUID = '{0000013A-0000-0000-C000-000000000046}';

  STGFMT_FILE = 3;
  STGFMT_ANY = 4;

type
 PPropSpecArray=^TPropSpecArray;  // массив спецификаций св-в
 TPropSpecArray=array[0..999] of TPropSpec; 

 PPropVariantArray=^TPropVariantArray; // массив - приемник, куда будут помещены значения нужных св-в
 TPropVariantArray=array[0..999] of TPropVariant;


// вспомогательные ф-ции  *******

function IsNTFS(AFileName : string) : boolean;
var
 fso, drv : OleVariant;
begin
 fso := CreateOleObject('Scripting.FileSystemObject');
 drv := fso.GetDrive(fso.GetDriveName(AFileName));
 Result:=drv.FileSystem = 'NTFS'
end;

function FileTimeToLocalSystemTime(ft:FILETIME):TSystemTime;
var
 t:FILETIME;
begin
 FileTimeToLocalFileTime(ft,t);
 FileTimeToSystemTime(t,result);
end;

function SysTimeToStr(ST : TSystemTime):string;
begin
 SetLength(result,15);
 GetTimeFormat(LOCALE_USER_DEFAULT,0,@st,nil,@result[1],15);
 SetLength(result, StrLen(@result[1]));
end;

function SysDateToStr(ST : TSystemTime) : string;
begin
 SetLength(Result, 255);
 GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, @ST, nil, @result[1], 255);
 SetLength(Result, LStrLen(@result[1]));
end;

function SysDateTimeToStr(ST:TSystemTime):string;
begin
 result:=SysDateToStr(ST)+' '+SysTimeToStr(ST)
end;

// *******

procedure TForm2.Button1Click(Sender: TObject);
var
 stgRoot:IStorage;
 stgPS:IPropertySetStorage;
 stgP:IPropertyStorage;
 ps:PPropSpecArray;
 pv:PPropVariantArray;
 lit:TListItem;  // значения св-в записываем в ListView
begin

 if (not OpenDialog1.Execute) then exit;  // выбираем файл

 // Проверяем: если это не compound file и система - не NTFS, тогда выходим.
 // (для compound файлов FS не важна)
 if (StgIsStorageFile(StringToOleStr(OpenDialog1.FileName))<>S_OK) then
  if (not IsNTFS(OpenDialog1.FileName)) then
  begin
   MessageBox(Handle,'NTFS needed for non-compound files','Error',MB_ICONERROR);
   exit;
  end;


  ListView1.Clear;

  if (StgOpenStorageEx(StringToOleStr(OpenDialog1.FileName), STGM_READ or STGM_SHARE_DENY_WRITE,
                        STGFMT_ANY, 0, nil,  nil, 
                       @IID_IPropertySetStorage, stgRoot)<>S_OK) then  // открываем файл
  begin
   MessageBox(Handle,'Can not open file','Error',MB_ICONERROR);
   exit;
  end;

 stgPS:=stgRoot as IPropertySetStorage;  // ссылаемся на нужный интерфейс
 if (stgPS.Open(FMTID_SummaryInformation,STGM_READ or STGM_SHARE_EXCLUSIVE,stgP)<>S_OK) then
 begin // открываем набор св-в
  MessageBox(Handle,'Can not open property set','Error',MB_ICONERROR);
  exit;
 end;

 ps:=nil;
 pv:=nil;
 try
   GetMem(ps,SizeOf(TPropSpec));
   GetMem(pv,SizeOf(TPropVariant));

   ps[0].ulKind:=PRSPEC_PROPID;   // считываем св-ва по их идентификатору (см. ActiveX.pas)

//  Прочитаем несколько св-в файла.
//  В этом примере - для наглядности - читаем по одному св-ву из потока (можно за один раз прочитать и больше),
//  поэтому каждый раз значение будет лежать в pv[0].

   ps[0].propid:=PIDSI_TITLE;     // заголовок
   lit:=ListView1.Items.Add;
   lit.Caption:='Title';
   if (stgP.ReadMultiple(1, @ps[0], @pv[0])=S_OK) then  // читаем св-во
   lit.SubItems.Add(pv[0].pszVal) // добавляем в ListView
   else lit.SubItems.Add('');

   ps[0].propid:=PIDSI_SUBJECT;   // тема
   lit:=ListView1.Items.Add;
   lit.Caption:='Subject';
   if (stgP.ReadMultiple(1, @ps[0], @pv[0])=S_OK) then
   lit.SubItems.Add(pv[0].pszVal)
   else lit.SubItems.Add('');

   ps[0].propid:=PIDSI_AUTHOR;   // автор
   lit:=ListView1.Items.Add;
   lit.Caption:='Author';
   if (stgP.ReadMultiple(1, @ps[0], @pv[0])=S_OK) then
   lit.SubItems.Add(pv[0].pszVal)
   else lit.SubItems.Add('');

   ps[0].propid:=PIDSI_COMMENTS; // комментарий
   lit:=ListView1.Items.Add;
   lit.Caption:='Comment';
   if (stgP.ReadMultiple(1, @ps[0], @pv[0])=S_OK) then
   lit.SubItems.Add(pv[0].pszVal)
   else lit.SubItems.Add('');

   ps[0].propid:=PIDSI_REVNUMBER; // номер редакции
   lit:=ListView1.Items.Add;
   lit.Caption:='Revision';
   if (stgP.ReadMultiple(1, @ps[0], @pv[0])=S_OK) then
   lit.SubItems.Add(pv[0].pszVal)
   else lit.SubItems.Add('');

   ps[0].propid:=PIDSI_APPNAME;   // приложение, создавшее пакет
   lit:=ListView1.Items.Add;
   lit.Caption:='Application';
   if (stgP.ReadMultiple(1, @ps[0], @pv[0])=S_OK) then
   lit.SubItems.Add(pv[0].pszVal)
   else lit.SubItems.Add('');

   ps[0].propid:=PIDSI_CREATE_DTM;   // Дата создания
   lit:=ListView1.Items.Add;
   lit.Caption:='Creation date';
   if (stgP.ReadMultiple(1, @ps[0], @pv[0])=S_OK) then
   lit.SubItems.Add(SysDateTimeToStr(FileTimeToLocalSystemTime(pv[0].filetime)))
   else lit.SubItems.Add('');

   ps[0].propid:=PIDSI_WORDCOUNT; // кол-во слов в документе
   lit:=ListView1.Items.Add;
   lit.Caption:='Word count';
   if (stgP.ReadMultiple(1, @ps[0], @pv[0])=S_OK) then
   lit.SubItems.Add(IntToStr(pv[0].lVal))
   else lit.SubItems.Add('');

 finally
   if assigned(ps) then FreeMem(ps);
   if assigned(pv) then FreeMem(pv);
   stgP:=nil;
   stgPS:=nil;
   stgRoot:=nil;
 end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
 // добавим в список 2 столбца (лучше это делать в дизайнере)
 ListView1.ViewStyle:=vsReport;
 ListView1.Columns.Add.Caption:='Name';
 ListView1.Columns.Add.Caption:='Value';

 // добавим в диалог открытия несколько типов compound-файлов
 OpenDialog1.Filter:='All Files (*.*)|*.*|MS Office Documents (*.doc;*.xls;*.dot)|*.doc; *.xls; *.dot|MSI Databases (*.msi)|*.msi';
end;

end.


М
Теги !

 К началу страницы 
+ Ответить 
Артемий
сообщение 5.07.2006 13:41
Сообщение #8


Гость






Слушай Volvo а ты не знаешь Как воспроизводить 3GP на TMediaPlayer? Или AMR?
 К началу страницы 
+ Ответить 
volvo
сообщение 7.07.2006 16:23
Сообщение #9


Гость






Значит, вот немного подправленная версия программы, извлекающей содержимое вкладки Summary... Работает следующим образом: вначале проверяет, можно ли открыть так называемый Property Set. Если можно (т.е., если он существует в файле), то его содержимое отображается. Если программа не нашла в файле Property Set, то она пытается (по расширению файла, не по содержанию!!!) найти информацию о выбранном файле (для WAV отображается содержимое заголовка, если он соответствует критериям, для MP3 - содержимое тегов ID3v1)...


Прикрепленные файлы
Прикрепленный файл  summary.rar ( 7.03 килобайт ) Кол-во скачиваний: 206
 К началу страницы 
+ Ответить 
volvo
сообщение 7.07.2006 20:07
Сообщение #10


Гость






Цитата(Артемий @ 5.07.2006 13:41) *
Как воспроизводить 3GP на TMediaPlayer? Или AMR?

Проигрывания 3gp, Стандартными средствами
 К началу страницы 
+ Ответить 
Артемий
сообщение 8.07.2006 11:32
Сообщение #11


Гость






Спасибо
lol.gif
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 18.07.2025 8:34
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"