C++ Builder has a lot of specific methods in its SysUtils library included in VCL and FMX libraries. Some of these are grouped as Path Manipulation Routines that allow users to edit, extract, get and set drive name, directory name, file name, and file extensions. These methods are combined in Vcl.FileCtrl, System.IOUtils, System.SysUtils libraries.
These methods are easy to use and easy to get or set file path strings in that operating system. They can be used with other component properties like the FileName property of OpenDialog, SaveDialog components. We can also check drives, files, or directories to see if they exist or not on a given path. You can also check file names and paths to see if it has an extension and has valid, allowable characters in it. For example, on Windows is it not permissible to create a file with a name that contains the “*” (asterisk) character since that is reserved by Windows as a wildcard. Files created with an “*” in their names could result in unexpected and possibly damaging behavior – for example trying to delete a file called “a*.txt” on the command line would actually delete all text files beginning with the letter “a”!
In this post, you’ll learn how to check a file name to see if it has an extension or not, how to check whether a given file name has an extension part, how to check whether a given file name contains only allowed characters, how to check whether a given path string contains only allowed characters, What is HasExtension, HasValidFileNameChars, and HasValidPathChars? By learning how to check file names and paths if they are valid for the Windows operating system. It will help you to easily build C++ applications using the C++ IDE.
Table of Contents
What is the C++ HasExtension method ?
The HasExtension Method (System::SysUtils::HasExtension ) is a SysUtils Method that checks whether a given file name has an extension part. We can call HasExtension to check whether a given file name has an extension part. HasExtension returns true if the file name has an extension; false otherwise.
The following table lists the parameters expected by this method:
Name | Meaning |
---|---|
Path | The verified file or directory name |
Note: that HasExtension method raises an exception if the given path contains invalid characters.
What is the syntax of HasExtension method?
Here is the Syntax for the HasExtension Method,
1 2 3 |
static bool __fastcall HasExtension(const System::UnicodeString Path); |
What is the C++ HasValidFileNameChars method?
The HasValidFileNameChars Method (System::SysUtils::HasValidFileNameChars) is a SysUtils Method that checks whether a given file name contains only allowed characters. We can call HasValidFileNameChars to check whether a given file name contains only allowed characters. HasValidFileNameChars returns true if the string contains only allowed characters; false otherwise.
The following table lists the parameters expected by this method:
Name | Meaning |
---|---|
Path | The verified file name string. |
UseWildcards | Specifies whether the wildcard characters are treated as valid file name characters (e.g. when true we can include asterisk or question marks in the filename although we should not create files containing these characters). With this argument set to True we can know that a filepath such as “C:\myfile\alltextfiles\a*.txt ” is valid which we can then use safely as a mask value in the OpenFile dialog functions. |
What is the syntax of HasValidFileNameChars method ?
Here is the Syntax for the HasValidFileNameChars
1 2 3 |
static bool __fastcall HasValidFileNameChars(const System::UnicodeString FileName, const bool UseWildcards); |
What is the C++ HasValidPathChars method ?
The HasValidPathChars Method (System.SysUtils.ExcludeTrailingBackslash) is a SysUtils Method that checks whether a given path string contains only allowed characters. We can call HasValidPathChars to check whether the given path string contains only allowed characters. HasValidPathChars returns true if the string contains only allowed characters; false otherwise.
The following table lists the parameters expected by this method:
Name | Meaning |
---|---|
Path | The verified path string. |
UseWildcards | Specifies whether the wildcard characters are treated as valid path characters (e.g. asterisk or question mark). See above. |
What is the syntax of HasValidPathChars method ?
Here is the Syntax for the HasValidPathChars Method:
1 2 3 |
static bool __fastcall HasValidPathChars(const System::UnicodeString Path, const bool UseWildcards); |
Here is a full example of how to use the C++ HasExtension, HasValidFileNameChars, HasValidPathChars methods
Here is the full C++ Builder VCL example,
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 |
#include <vcl.h> #include <System.IOutils.hpp> #pragma hdrstop #include "Include_Exclude_Path_Delimiters_Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { if( TPath::HasExtension( L"D:\\MyFoldertestfile.jpg") ) Memo1->Lines->Add( L"Path string has extension"); else Memo1->Lines->Add( L"Path string has no extension"); if( TPath::HasValidFileNameChars( L"D:\\Notes\\Görüşme.doc", 0) ) Memo1->Lines->Add( L"Path string has valid file name chars"); else Memo1->Lines->Add( L"Path string has no valid file name chars"); if( TPath::HasValidPathChars( L"D:\\*Folder", 0) ) Memo1->Lines->Add( L"Path string has path chars"); else Memo1->Lines->Add( L"Path string has no valid path chars"); String filename = L"MYIMAGE.jpg"; if ( SameFileName( filename, L"myimage.jpg") ) Memo1->Lines->Add( L"Same file name"); else Memo1->Lines->Add( L"Not same file name"); } |
C++ Builder is the easiest and fastest C and C++ IDE for building simple or professional applications on the Windows, MacOS, iOS & Android operating systems. It is also easy for beginners to learn with its wide range of samples, tutorials, help files, and LSP support for code. RAD Studio’s C++ Builder version comes with the award-winning VCL framework for high-performance native Windows apps and the powerful FireMonkey (FMX) framework for cross-platform UIs.
There is a free C++ Builder Community Edition for students, beginners, and startups; it can be downloaded from here. For professional developers, there are Professional, Architect, or Enterprise versions of C++ Builder and there is a trial version you can download from here.