[This is preliminary documentation and is subject to change.]

Called to retrieve the first file in a directory of the plugin's file system.

Namespace: Tools.TotalCommanderT
Assembly: Tools.TotalCommander (in Tools.TotalCommander.dll) Version: 1.5.3.38916 (1.5.3.38916)

Syntax

C#
[EditorBrowsableAttribute(EditorBrowsableState.Never)]
[CLSCompliantAttribute(false)]
public void* FsFindFirst(
	sbyte* Path,
	_WIN32_FIND_DATAW* FindData
)
Visual Basic
<EditorBrowsableAttribute(EditorBrowsableState.Never)> _
<CLSCompliantAttribute(False)> _
Public Function FsFindFirst ( _
	Path As SByte*, _
	FindData As _WIN32_FIND_DATAW* _
) As Void*
Visual C++
[EditorBrowsableAttribute(EditorBrowsableState::Never)]
[CLSCompliantAttribute(false)]
public:
void* FsFindFirst(
	signed char* Path, 
	_WIN32_FIND_DATAW* FindData
)
F#
[<EditorBrowsableAttribute(EditorBrowsableState.Never)>]
[<CLSCompliantAttribute(false)>]
member FsFindFirst : 
        Path:nativeptr<sbyte> * 
        FindData:nativeptr<_WIN32_FIND_DATAW> -> nativeptr<unit> 
JScript
JScript does not support APIs that consume or return unsafe types.

Parameters

Path
Type: System..::..SByte*
Full path to the directory for which the directory listing has to be retrieved. Important: no wildcards are passed to the plugin! All separators will be backslashes, so you will need to convert them to forward slashes if your file system uses them!

As root, a single backslash is passed to the plugin. The root items appear in the plugin base directory retrieved by FsGetDefRootName(SByte*, Int32) at installation time. This default root name is NOT part of the path passed to the plugin!

All subdirs are built from the directory names the plugin returns through FsFindFirst(SByte*, _WIN32_FIND_DATAW*) and FsFindNext(Void*, _WIN32_FIND_DATAW*), separated by single backslashes, e.g. \Some server\c:\subdir

FindData
Type: _WIN32_FIND_DATAW*
A standard [D:WIN32_FIND_DATA] struct as defined in the Windows SDK, which contains the file or directory details. Use the dwFileAttributes field set to Directory to distinguish files from directories. On Unix systems, you can | (or) the dwFileAttributes field with 0x80000000 and set the dwReserved0 parameter to the Unix file mode (permissions).

Return Value

Return INVALID_HANDLE_VALUE (==-1, not zero!) if an error occurs, or a number of your choice if not. It is recommended to pass a pointer to an internal structure as this handle, which stores the current state of the search. This will allow recursive directory searches needed for copying whole trees. This handle will be passed to FsFindNext(Void*, _WIN32_FIND_DATAW*) by the calling program.

When an error occurs, call [M:SetLastError(System.UInt32!System.Runtime.CompilerServices.IsLong)] to set the reason of the error. Total Commander checks for the following two errors:

ERROR_NO_MORE_FILES: The directory exists, but it's empty (Totalcmd can open it, e.g. to copy files to it)Any other error: The directory does not exist, and Total Commander will not try to open it.

Remarks

FsFindFirst(SByte*, _WIN32_FIND_DATAW*) may be called directly with a subdirectory of the plugin! You cannot rely on it being called with the root \ after it is loaded. Reason: Users may have saved a subdirectory to the plugin in the Ctrl+D directory hotlist in a previous session with the plugin.

This function is called by Total Commander and is not intended for direct use

See Also