C++Builder How To Check Characters of File Names and Paths on Windows

FireWind

Свой
Регистрация
2 Дек 2005
Сообщения
1,957
Реакции
1,203
Credits
4,034
How To Check Characters of File Names and Paths on Windows
By Yilmaz Yoru September 15, 2021

How can I check a file name to see if it has extension or not ? How can I check whether a given file name has an extension part? How can I check whether a given file name contains only allowed characters? How can I check whether a given path string contains only allowed characters? What is HasExtension? What is HasValidFileNameChars? What is HasValidPathChars?

C++ Builder has a lot of specific methods in its Для просмотра ссылки Войди или Зарегистрируйся library included in VCL and FMX libraries. Some of these are grouped as Для просмотра ссылки Войди или Зарегистрируйся that allows users to edit, extract, get and set drive name, directory name, file name and file extensions. These methods are combined in Для просмотра ссылки Войди или Зарегистрируйся, Для просмотра ссылки Войди или Зарегистрируйся, Для просмотра ссылки Войди или Зарегистрируйся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 are exist or not on a given path. You can also check file names and paths to see if it has a extension and has valid, allowable characters in it. For example, on Windows is it not permissible to create a file with a name which 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”!

Let’s see how we can check file names and paths if they are valid for the Windows operating system.

What is the C++ HasExtension method ?​

The Для просмотра ссылки Войди или Зарегистрируйся 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:

NameMeaning
PathThe 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,
C++:
static bool __fastcall HasExtension(const System::UnicodeString Path);

What is the C++ HasValidFileNameChars method?​

The Для просмотра ссылки Войди или Зарегистрируйся 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:

NameMeaning
PathThe verified file name string.
UseWildcardsSpecifies 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
C++:
static bool __fastcall HasValidFileNameChars(const System::UnicodeString FileName, const bool UseWildcards);

What is the C++ HasValidPathChars method ?​

The Для просмотра ссылки Войди или Зарегистрируйся 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:

NameMeaning
PathThe verified path string.
UseWildcardsSpecifies 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:
C++:
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,
C++:
#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");
}