Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 69

Как узнать размер файла, к которому обращаются через OpenDialog?

12.09.2011, 10:12. Показов 4857. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, как узнать размер файла, к которому обращаюсь через OpenDialog.
Если задано имя файла в явном виде, то
C++ Скопировано
1
2
3
LPCSTR zzz="c:\\123.txt";
FileHandl=CreateFileA(zzz, Generic_Read, ...);
n=GetFileSize(FileHandl, NULL);
все работает.
Если вместо zzz подставляю OpenDialog->FileName
то не работает.
Как узнать хэндл OpenDialog->FileName?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.09.2011, 10:12
Ответы с готовыми решениями:

Узнать размер файла на удалённом хосте через powershell
Добрый бодрый! Есть необходимость узнать размер файла на удаленном хосте. Есть строка ::Round((gi...

Как записать данные в StringGrid через OpenDialog из файла?
Доброго времени суток! Как записать данные в StringGrid через OpenDialog из файла? Есть кнопка сохранения с кодом: Перековыривал на...

Как узнать размер файла
Как узнать размер файла в GB и MB? Добавлено через 2 часа 15 минут Понятно, всем спасибо что помогли но я нашел Dim f as new...

9
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
12.09.2011, 13:06
Цитата Сообщение от Алексей_С Посмотреть сообщение
OpenDialog->FileName
попробуй OpenDialog->m_ofn.lpstrFile
или же OpenDialog->GetFolderPath() + OpenDialog->GetFileName()
GetFileName на сколько помню содержит лишь название файла и расширение...
1
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 69
12.09.2011, 23:55  [ТС]
Спасибо за ответ. Не помогает.
0
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
13.09.2011, 09:11
Цитата Сообщение от Алексей_С Посмотреть сообщение
Спасибо за ответ. Не помогает.
Хмм, грешу на то что не совсем те что надо параметры в CreateFile передаёшь
Цитата Сообщение от Алексей_С Посмотреть сообщение
CreateFileA(zzz, Generic_Read, ...)
Привожу кусок из своей программы, код 100% работоспособный
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
WIN32_FIND_DATA * CStorage::MkPathList(LPCTSTR szPath)
{
    WIN32_FIND_DATA pFILE_DATA;ULONG uIND = nStgElm; 
    pDATA[nStgElm].dwFileAttributes = GetFileAttributes(szPath);
    pDATA[nStgElm].dwReserved1      = iINDENT;
    HANDLE hFile = CreateFile(
        strcpy(pDATA[nStgElm].cFileName,szPath), 
            GENERIC_READ,
            FILE_SHARE_READ,
            NULL, 
            OPEN_EXISTING, 
            FILE_ATTRIBUTE_NORMAL,
            NULL);
    if(hFile != INVALID_HANDLE_VALUE)
    {
        uStgLen += (pDATA[nStgElm].nFileSizeLow = GetFileSize(hFile,NULL));
        CloseHandle(hFile);
    }
//...
Вот список атрибутов CreateFile
C++ Скопировано
1
2
3
4
5
6
7
8
CreateFile(
        strcpy(pDATA[nStgElm].cFileName,szPath), 
            GENERIC_READ,
            FILE_SHARE_READ,
            NULL, 
            OPEN_EXISTING, 
            FILE_ATTRIBUTE_NORMAL,
            NULL);
Размер файла получаю GetFileSize(hFile,NULL)
1
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 69
13.09.2011, 22:42  [ТС]
Размер файла я тоже получаю GetFileSize(hFile,NULL).
Весь вопрос, как получить hFile!
Если задать в явном виде исследуемый файл
LPCSTR zzz="c:\\123.txt";
то
hFile=CreateFileA(zzz, Generic_Read, ...);
это работает.
А если выбирать файл вручную после активации openFileDialog,
то выбранный файл openFileDialog->FileName имеет тип String^ и не получается преобразовать его в тип LPCSTR.
Пробовал
1) zzz=openFileDialog1->FileName;
2) zzz=Convert::ToChar(openFileDialog1->FileName);
3) strcpy(zzz,openFileDialog1->FileName);
4) zzz=reinterpret_cast<LPCSTR>(openFileDia log1->FileName);
УВЫ, не помогает.
0
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
14.09.2011, 21:38
OpenDialog->m_ofn.lpstrFile,пробовал-это прямой доступ к полям файлового диалога
1
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 69
15.09.2011, 09:06  [ТС]
1>c:\analyz'ator\analyz'ator\Form333.h(2 023): error C2039: m_ofn: не является членом "System::Windows::Forms::OpenFileDia log"
0
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
15.09.2011, 09:34
Алексей_С, я понял в чём проблемма я говорил об MFC-ном CFileDialog (не о System.Windows.Forms), теперь то понял что о немного разных FileDialog говорим
в любом случае список аргументов позволяет получать хендл, туда нужно полный путь вбивать
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
CreateFile(
* * * * * * * * strcpy(pDATA[nStgElm].cFileName,szPath),
* * * * * * * * * * * * GENERIC_READ,
* * * * * * * * * * * * FILE_SHARE_READ,
* * * * * * * * * * * * NULL,
* * * * * * * * * * * * OPEN_EXISTING,
* * * * * * * * * * * * FILE_ATTRIBUTE_NORMAL,
* * * * * * * * * * * * NULL);
проблемма в только в первом параметре CreateFile -
Цитата Сообщение от Алексей_С Посмотреть сообщение
OpenDialog->FileName
- она полный путь к файлу возвращает, думаю нет вот что в MSDN-е написано (http://msdn.microsoft.com/en-u... log.aspx):

FileName Gets or sets a string containing the file name selected in the file dialog box.
(Inherited from FileDialog.)
0
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
15.09.2011, 10:05
Алексей_С, а что в CLR не хватает .NET-овских объектов по работе с файловой системой.
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
   openFileDialog1->Filter   = "Вcе файлы|*.*||";
   openFileDialog1->FileName = "";
 
   openFileDialog1->ShowDialog(this);
   if(openFileDialog1->FileName->Length > 0) {
 
         System::IO::FileInfo^ info = gcnew System::IO::FileInfo(openFileDialog1->FileName);
         // вывести в текстовое поле размер файла
         textBox1->Text =  info->Length.ToString();
   }
}
1
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 69
15.09.2011, 13:05  [ТС]
Всем большое спасибо за помощь!
xAtom! Огромное спасибо! Все замечательно заработало!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.09.2011, 13:05
Помогаю со студенческими работами здесь

Как узнать размер файла?
Здравствуйте,нашел такой код только он чёт не правельно работает, подскажите пожалуйста If (f.Size &lt; 20000) Then MsgBox...

Как узнать размер файла?
Подскажите, пожалуйста, как узнать размер файла (независимо - Win98 или WinXP, Fat32 или NTFS)?

Как узнать размер файла?
1. как узнать размер файла? 2. OpenDialog1.FileName возвращает путь к файлу а как узнать только имя файла? Добавлено через 6 минут ...

Как узнать размер файла?
Можете подсказать, какая функция показывает размер файла?

Как узнать размер файла?
Доброго времени суток!Я задался вопросом как определить размер файла имея путь к нему?нашел в инете пример вот такой function...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
Метод с двумя буферами (или double buffering) или ping-pong buffering
Hrethgir 02.04.2025
Из ответов LM модели. Метод, который предполагает использование двух массивов для хранения промежуточных результатов сложения векторов, обычно применяется в сценариях, где необходимо минимизировать. . .
На любовном киберфронте
Alexander-7 01.04.2025
Недавно на одном малоизвестном сайте знакомств мною заинтересовалась девушка: «Текст немного странный. Но, судя по адресу почты, иностранка», – подумал я. Поколебавшись пару суток, я ответил ей:. . .
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
Моки в Python: Mock Object Library
py-thonny 29.03.2025
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или. . .
JavaScript: Управление памятью и улучшение производительности
run.dev 29.03.2025
В отличие от низкоуровневых языков программирования, JavaScript не требует ручного выделения и освобождения памяти. Здесь работает автоматический сборщик мусора, который определяет, какие объекты. . .
Мультитенантная архитектура со SpringBoot и PostgreSQL
ArchitectMsa 29.03.2025
SaaS-приложения редко обслуживают одного клиента и обычно они должны поддерживать множество организаций, каждая из которых работает в своём изолированном пространстве. Мультитенантная архитектура. . .
std::span в C++: Производительность и лучшие практики
NullReferenced 28.03.2025
std::span — одно из самых недооценённых нововведений стандарта C++20, которое радикально меняет подход к работе с непрерывными последовательностями данных. По сути, это невладеющее представление. . .
Многопоточность в C#: Threadpool
UnmanagedCoder 28.03.2025
Пул потоков в C# — это коллекция заранее созданных и готовых к использованию потоков, которые находятся в распоряжении приложения. Вместо того чтобы создавать и уничтожать потоки для каждой небольшой. . .
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер