Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ExeiLj
10 / 10 / 3
Регистрация: 02.08.2012
Сообщений: 128
#1

Чтение свойтв (тех данных) файла - C++

02.08.2012, 18:29. Просмотров 532. Ответов 8
Метки нет (Все метки)

Здравствуйте.

Подскажите пожалуйста, как считывать все тех данные файлов? (они же свойства файла)

Под техданными имею ввиду: размеры картинки, время создания/изменения, разрешение видеофайла, скорость, продолжительность, размер и т.п.
В общем все то, что показывает винда при выделении файла.

Грубо говоря, для начала: в текстбоксе пишу полный путь к файлу, и хочу получить все эти тех данные...

Подскажите как?

Добавлено через 6 минут
Может есть примеры или книги как создать свой проводник?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2012, 18:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Чтение свойтв (тех данных) файла (C++):

Чтение текста из файла и вывод на экран только тех предложений, которые не содержат запятых
нужна программа, которая считывает текст из файла и выводит на экран только...

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла.
#include<iostream> #include<fstream> #include<locale.h> #include<iomanip>...

Чтение из файла определённого места и сортировка данных исходя из этих данных
Есть некий текстовый документ, содержащий информацию о посещении сайта в...

Чтение данных из файла С++
Здравствуйте. Дан простой пример потокового ввода/вывода дисковых файлов из...

Чтение данных из файла
здравствуйте. суть проблемы: у меня есть некий файл, в котором записаны в 2...

Чтение данных из файла
Вот программа запись и чтение из файла. Сначала записываем данные о...

8
edward_jonson
160 / 160 / 68
Регистрация: 23.02.2011
Сообщений: 392
02.08.2012, 20:24 #2
это всё упирается в WinApi, пример для размера:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <windows.h>
 
int main()
{
    HANDLE myFileHandle = CreateFile("C:\\file.txt", // Если что, можно брать файл с любым расширением, не только txt
                                GENERIC_READ,
                                0,
                                NULL,
                                OPEN_EXISTING,
                                FILE_ATTRIBUTE_NORMAL,
                                NULL);
 
    DWORD size = GetFileSize(myFileHandle, NULL);
 
    printf("%d Bytes", size);
 
    CloseHandle (myFileHandle);
 
}
1
edward_jonson
160 / 160 / 68
Регистрация: 23.02.2011
Сообщений: 392
02.08.2012, 20:29 #3
Прямая дорога тебе на MSDN. Вот, например, ф-я для получения времени создания\изменения - http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx Ищи всё там.
Прикрепил к предыдущему посту
1
Миниатюры
Чтение свойтв (тех данных) файла  
ExeiLj
10 / 10 / 3
Регистрация: 02.08.2012
Сообщений: 128
02.08.2012, 23:27  [ТС] #4
Спасибо, но во первых возникли сложности с переводом DWORD в String, чтобы вывести в Label.
Во вторых криво читает большие файлы...
0
edward_jonson
160 / 160 / 68
Регистрация: 23.02.2011
Сообщений: 392
03.08.2012, 03:49 #5
По поводу перевода DWORD в String - DWORD = unsigned long, почему сложности с переводом целого числа в строку? Способов куча - itoa, IntToStr - для билдера(или что там у вас), даже обычное приведение типов должно подойти (с AnsiString прокатывало).
По поводу больших файлов - данный метод
C
1
2
    DWORD size = GetFileSize(myFileHandle, NULL);
    printf("%d Bytes", size);
работоспособен для файлов < 4Гб (4294967295 - максимальное значение для unsigned long, что в байтах = (4Гбайт - 1 байт) ) ДА И КСТАТИ! следует поменять тут: printf("%lu Bytes", size);
Итак, ежели у вас файл >= 4Гб, тогда следует видоизменить немного способ:
C
1
2
DWORD sizeH = 0;
DWORD sizeL = GetFileSize(myFileHandle, &sizeH);
Тогда уже размер файла будет храниться в 2-х переменных - из-за того, что в DWORD может храниться 32 бита, размер файла >= 4Гб туда не поместится. И старшие 32 бита размера файла будут в sizeH, младшие - в sizeL.
1
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
03.08.2012, 08:11 #6
Если знать, поля файла, где это записано, то можно и без WinApi всё это извлечь (и, если нужно, переписать). Тут на форуме была тема перезаписи заголовков .bmp файла. Размер файла можно так узнать. Открывается в бинарном режиме для чтения. Курсор будет на начале файла. Перемещение курсора в конец (seekg(ios::end)), tellg() выдаст количество байтов.
1
MrCold
859 / 757 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
03.08.2012, 10:00 #7
Цитата Сообщение от ExeiLj Посмотреть сообщение
в текстбоксе пишу полный путь к файлу, и хочу получить все эти тех данные...
Общие свойства :
CLI код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
 
        
if  ( textBox1->Text != "")
 
    {
      String^ path =  textBox1->Text;
 
           if (  System::IO::File::Exists( path ) )
      {
 
             System::IO::FileInfo^ file = gcnew System::IO::FileInfo( path );
 
             label1->Text = (
 
                   "Датa и время создания файла"            + file->CreationTime + "\r\n" 
                 + "Дата последней записи :  "              + file->LastWriteTime + "\r\n" 
                 + "Расположение : "                        + file->FullName + "\r\n" 
                 + "Тип файла: "                               + file->Attributes.ToString() + "\r\n" 
                 + "Размер файла : "                        + file->Length + " байт" + "\r\n"  
 
                             );
      }
 
           else 
 
               label1->Text = "Файл не найден";
         }
 
       else 
 
               label1->Text = "Путь к файлу не введен .";
         
         }
1
ExeiLj
10 / 10 / 3
Регистрация: 02.08.2012
Сообщений: 128
03.08.2012, 16:51  [ТС] #8
Цитата Сообщение от edward_jonson Посмотреть сообщение
По поводу перевода DWORD в String - DWORD = unsigned long, почему сложности с переводом целого числа в строку? Способов куча - itoa, IntToStr - для билдера(или что там у вас), даже обычное приведение типов должно подойти (с AnsiString прокатывало).
Сколько не рыл инет, найти нормального решения не смог. А IntToStr билдер пишет только для инт и инт64...

Добавлено через 10 минут
Цитата Сообщение от MrCold Посмотреть сообщение
System::IO::File::Exists( path )
Пишет IO не часть System...
Я так понял это связано .NET ...

Цитата Сообщение от MrCold Посмотреть сообщение
String^ path = textBox1->Text;
что значит ^ ?
0
MrCold
859 / 757 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
03.08.2012, 17:57 #9
Цитата Сообщение от ExeiLj Посмотреть сообщение
Пишет IO не часть System...
Я так понял это связано .NET ...
Kод - для VisualStudio C++/CLI Windows Forms
0
03.08.2012, 17:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2012, 17:57
Привет! Вот еще темы с решениями:

Чтение данных из файла
Вот задание прочитать данные из файла и вывести их также как они в файле...

Чтение данных из файла
Очень нужна помощь: никак не получается написать функцию чтения из файла на...

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

Чтение данных из файла
Доброго времени, долго искал ответ, решил все таки спросить. Есть файл в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru