Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Ścieżki do popularnych lokalizacji w windowsie tj. dokumenty, pobrane itp

Ostatnio zmodyfikowano 2025-09-28 01:51
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
Ścieżki do popularnych lokalizacji w windowsie tj. dokumenty, pobrane itp
» 2025-09-22 23:05:10
Witam. Jak uzyskać ścieżki do popularnych lokalizacji w windowsie typu moje dokumenty, moje obrazy, pobrane?
P-183036
pekfos
» 2025-09-22 23:36:08
Możesz odczytać zmienną środowiskową USERPROFILE, tam masz ścieżkę do (przykładowo) C:\Users\aaaa, dalej masz podkatalogi Documents, Pictures, Downloads. Te katalogi się tak nazywają niezależnie od wersji językowej.
https://en.cppreference.com/w/cpp/utility/program/getenv
P-183037
tBane
Temat założony przez niniejszego użytkownika
» 2025-09-23 03:58:03
Ok dzięki. :-) A jak załadować ścieżki do dysków? W sensie: C:\ D:\ E:\ i tak dalej ?
P-183038
pekfos
» 2025-09-23 16:50:14
https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getlogicaldrives
C/C++
#include <windows.h>
#include <cstdio>

int main()
{
   
DWORD drives = GetLogicalDrives();
   
for( int i = 0; i < 32; i++ )
   
if(( drives >> i ) & 1 )
       
 printf( "%c:\\\n", 'A' + i );
   
}
P-183039
tBane
Temat założony przez niniejszego użytkownika
» 2025-09-24 02:40:18
Ok dzięki. Wszystko działa :-) Teraz będę mógł napisać całkiem dobre okienko dialogowe do przeglądania plików! :D
P-183040
tBane
Temat założony przez niniejszego użytkownika
» 2025-09-27 05:05:46
Cześć. Pracuję obecnie nad zakładką Favorites. Potrzebuję jeszcze wczytać ostatnio przeglądane pliki. Chodzi mi o tę lokalizację \Recent Places. Wyrzuca mi niestety błąd. Da się to jakoś zrobić? Czy to wewnętrznie jakoś Windows przetwarza i nie da się z tym nic zrobić?



w taki sposób przypisuję aktualną lokalizację
C/C++
void Dialog_Save_As::createFavorites() {
   
   
const wchar_t * userProfile = _wgetenv( L"USERPROFILE" );
   
std::wstring up( userProfile );
   
   
_favorites.push_back( new LocationRect( up + L"\\Desktop" ) );
   
_favorites.push_back( new LocationRect( up + L"\\Downloads" ) );
   
_favorites.push_back( new LocationRect( up + L"\\Recent" ) );
   
   
// for the test - set the location
   
currentPath = _favorites[ 2 ]->_path.wstring(); // error
   
}

w taki sposób ładuję folder
C/C++
void Dialog_Save_As::loadDirectory() {
   
   
_paths.clear();
   
   
// load paths
   
for( const auto & path: std::filesystem::directory_iterator( currentPath ) ) {
       
_paths.push_back( path );
       
std::wcout << path.path().wstring() << std::endl;
   
}
}

_Error _Access_denied (5) __std_win_error
_Op 0x00007ff7948a4418 directory_iterator::directory_iterator const char *
_Path1 LC:\\Users\\tBane\\Recent const std::filesystem::path &

ps. sorki za wygląd ramki ale nie potrafię dobrze jej sformatować
P-183046
tBane
Temat założony przez niniejszego użytkownika
» 2025-09-28 00:28:03
Zmieniłem ścieżkę do folderu recent places. Teraz listuje folder ale, wyrzuca błąd

C/C++
void Dialog_Save_As::createFavorites() {
   
   
const wchar_t * userProfile = _wgetenv( L"USERPROFILE" );
   
std::wstring up( userProfile );
   
   
_favorites.push_back( new LocationRect( up + L"\\Desktop" ) );
   
_favorites.push_back( new LocationRect( up + L"\\Downloads" ) );
   
_favorites.push_back( new LocationRect( up + L"\\AppData\\Roaming\\Microsoft\\Windows\\Recent" ) );
   
   
// for the test - set the location
   
currentPath = _favorites[ 2 ]->_path.wstring();
   
}


[[noreturn]] inline void _Throw_system_error_from_std_win_error(const __std_win_error _Errno) {
    _THROW(system_error{_Make_ec(_Errno)});
P-183051
tBane
Temat założony przez niniejszego użytkownika
» 2025-09-28 01:26:05
To przez złe sortowanie. Jakiś błąd się tu wkradł.

C/C++
bool sortkey( std::filesystem::directory_entry first, std::filesystem::directory_entry second ) {
   
   
if( first.is_directory() && second.is_directory() ) {
       
std::string name_1 = first.path().filename().string();
       
std::string name_2 = second.path().filename().string();
       
       
std::transform( name_1.begin(), name_1.end(), name_1.begin(),[ ]( unsigned char c ) { return std::tolower( c ); } );
       
std::transform( name_2.begin(), name_2.end(), name_2.begin(),[ ]( unsigned char c ) { return std::tolower( c ); } );
       
       
if( name_1 < name_2 )
           
 return true;
       
else
           
 return false;
       
   
}
   
else if( first.is_directory() && !second.is_directory() ) {
       
return true;
   
}
   
else if( !first.is_directory() && second.is_directory() ) {
       
return false;
   
}
   
else {
       
// both are file
       
std::string name_1 = first.path().filename().string();
       
std::string name_2 = second.path().filename().string();
       
       
std::transform( name_1.begin(), name_1.end(), name_1.begin(),[ ]( unsigned char c ) { return std::tolower( c ); } );
       
std::transform( name_2.begin(), name_2.end(), name_2.begin(),[ ]( unsigned char c ) { return std::tolower( c ); } );
       
       
if( name_1 < name_2 )
           
 return true;
       
else
           
 return false;
       
   
}
}

// ...
// ...
// ...

// std::vector <std::filesystem::directory_entry> _paths;
void Dialog_Save_As::sortTheFiles() {
   
std::sort( _paths.begin(), _paths.end(), sortkey );
}
P-183052
« 1 » 2
  Strona 1 z 2 Następna strona