Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: need windows-specific help for FLAC (Read 4813 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

need windows-specific help for FLAC

this is pretty far off-topic but I'm hoping someone familiar with win APIs here will see it...

flac (1.1.3) needs to be able to figure out if two filenames refer to the same file.  in POSIX this is easy, you just stat() both of them and compare st_dev and st_ino (device and inode).  but at least for me on NT4 with MSVC6 the inode is always 0.

so does anyone know what the win-specific way to do this?  I question being able to get it right by just trying to normalize the file names with the current working directory.

Josh

need windows-specific help for FLAC

Reply #1
but at least for me on NT4 with MSVC6 the inode is always 0.

Quote
The inode, and therefore st_ino, has no meaning in the FAT, HPFS, or NTFS file systems.


so does anyone know what the win-specific way to do this?

hope this will be useful

GetFileInformationByHandle, BY_HANDLE_FILE_INFORMATION, CreateFile.
Quote
nFileIndexHigh
High-order part of a unique identifier that is associated with a file. For more information, see nFileIndexLow.
nFileIndexLow
Low-order part of a unique identifier that is associated with a file.

This value is useful only while the file is open by at least one process. If no processes have it open, the index may change the next time the file is opened.

The identifier (low and high parts) and the volume serial number that uniquely identify a file on a single computer. To determine whether two open handles represent the same file, combine this identifier and the volume serial number for each file and compare them.

Quote
#include <Windows.h>
#include <Winbase.h>
...
HANDLE hFile = CreateFile("D:\\audio\\flac.exe", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
BY_HANDLE_FILE_INFORMATION info;
GetFileInformationByHandle(hFile, &info);
CloseHandle(hFile);
printf("File info %ld-%ld\n", info.nFileIndexHigh, info.nFileIndexLow);

need windows-specific help for FLAC

Reply #2
whew, thanks!  I'll try that.

Josh

need windows-specific help for FLAC

Reply #3
cool, it works, just checked it in.