Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
how to get a file's modified date/time and size in bytes?
#12
(05-22-2024, 06:42 PM)SpriggsySpriggs Wrote:
Quote:Sure, let's create a function in C that retrieves the last modified date and time of a file in a cross-platform manner. We'll use the standard library functions available in C for both Unix-like systems (Linux, macOS) and Windows.

### Plan

1. **Include necessary headers**: We need to include different headers depending on the platform.
2. **Define the function**: The function `get_last_modified_time` will take a file path as an argument.
3. **Platform-specific code**:
  - For Unix-like systems, we'll use `stat` to get the file's metadata.
  - For Windows, we'll use `GetFileAttributesEx` to get the file's metadata.
4. **Format the output**: We'll format the output to display the last modified date and time.

Here’s the complete C code:

```c
#include <stdio.h>
#include <time.h>
#ifdef _WIN32
#include <windows.h>
#else
#include <sys/stat.h>
#endif

void get_last_modified_time(const char *filepath) {
#ifdef _WIN32
    WIN32_FILE_ATTRIBUTE_DATA fileInfo;
    if (GetFileAttributesEx(filepath, GetFileExInfoStandard, &fileInfo)) {
        FILETIME ft = fileInfo.ftLastWriteTime;
        SYSTEMTIME st;
        FileTimeToSystemTime(&ft, &st);
        printf("Last modified date and time: %02d/%02d/%d %02d:%02d:%02d\n",
              st.wDay, st.wMonth, st.wYear,
              st.wHour, st.wMinute, st.wSecond);
    } else {
        printf("Failed to get file attributes for %s\n", filepath);
    }
#else
    struct stat attr;
    if (stat(filepath, &attr) == 0) {
        struct tm *tm_info = localtime(&attr.st_mtime);
        char buffer[30];
        strftime(buffer, 30, "%Y-%m-%d %H:%M:%S", tm_info);
        printf("Last modified date and time: %s\n", buffer);
    } else {
        perror("stat");
    }
#endif
}

int main() {
    const char *filepath = "path/to/your/file.txt";
    get_last_modified_time(filepath);
    return 0;
}
```

### Explanation

1. **Headers**:
  - `stdio.h` for input/output functions.
  - `time.h` for time manipulation.
  - `windows.h` for Windows-specific file attributes.
  - `sys/stat.h` for Unix-like system file attributes.

2. **Function**:
  - `get_last_modified_time` is defined to handle both Unix-like and Windows systems.
  - On Windows, `GetFileAttributesEx` is used to get file information and `FileTimeToSystemTime` to convert it to a readable format.
  - On Unix-like systems, `stat` is used to get file information and `localtime` to convert the last modification time to a readable format.

3. **Main Function**:
  - Example usage with a placeholder file path.
  - Call to `get_last_modified_time` to print the last modified date and time.

### Suggestions for Next Steps

**a.** Add error handling for different edge cases (e.g., file not found, permission issues).

**b.** Modify the function to return the last modified date and time as a string instead of printing it.
Wow, that was fast! 
Did someone already suggest this? 
Did you have GPT write that? Is that sarcasm? LoL
I don't expect the team to implement every suggestion, but figure if there is something that might be useful to others, may as well contribute it to the list...
Reply


Messages In This Thread
RE: how to get a file's modified date/time and size in bytes? - by madscijr - 05-22-2024, 07:02 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Font Size in Threads Dimster 5 377 12-12-2025, 04:49 PM
Last Post: Dimster
  auto-detecting screen resolution for optimal window size on non-Windows systems madscijr 11 1,085 11-10-2025, 07:23 PM
Last Post: madscijr
  auto-detecting screen resolution for optimal window size on non-Windows systems madscijr 0 227 10-26-2025, 06:58 PM
Last Post: madscijr
  question on determining time spent in area fistfullofnails 9 845 08-25-2025, 01:55 PM
Last Post: fistfullofnails
  Testing against multiple elements at a time without select case CMR 4 845 04-17-2025, 02:16 AM
Last Post: CMR

Forum Jump:


Users browsing this thread: 1 Guest(s)