-
Notifications
You must be signed in to change notification settings - Fork 0
/
WindowsFileWatch.cpp
94 lines (81 loc) · 2.4 KB
/
WindowsFileWatch.cpp
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "WindowsFileWatch.h"
#include <QDebug>
#include <QFileInfo>
//#include <Shlwapi.h>
#include <assert.h>
WindowsFileWatch::WindowsFileWatch(const QString& filePath, QObject* parent)
: QObject(parent)
, mFilePath(filePath)
{
bool connectOk = connect(&mFileSystemWatcher, &QFileSystemWatcher::fileChanged, this, &WindowsFileWatch::fileChanged);
assert(connectOk);
connectOk = connect(&mFileSystemWatcher, &QFileSystemWatcher::directoryChanged, this, &WindowsFileWatch::directoryChanged);
assert(connectOk);
openFile();
setupFileWatcher();
}
WindowsFileWatch::~WindowsFileWatch()
{}
void WindowsFileWatch::openFile()
{
// mWinApiFilePath = reinterpret_cast<const wchar_t*>(mFilePath.utf16());
// mHandle = CreateFile(mWinApiFilePath,
// GENERIC_READ,
// FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
// NULL,
// OPEN_EXISTING,
// NULL,
// NULL
// );
// int file_handle = _open_osfhandle(reinterpret_cast<intptr_t>(mHandle), 0);
// mFile.open(file_handle, QIODevice::ReadOnly);
// mTextStream.setDevice(&mFile);
// mTextStream.reset();
// qDebug() << "OpenFile end";
// qDebug() << "Opened file desctiptor: " << file_handle;
// fileChanged();
}
void WindowsFileWatch::setupFileWatcher()
{
mFileSystemWatcher.addPath(mFilePath);
mFileSystemWatcher.addPath(QFileInfo(mFilePath).path());
qDebug() << "fileWatcher setup done";
}
void WindowsFileWatch::closeHandle()
{
CloseHandle(mHandle);
mHandle = nullptr;
mFile.close();
qDebug() << "Handle closed";
}
void WindowsFileWatch::fileChanged()
{
qDebug() << "File change detected";
// if (!PathFileExistsW(mWinApiFilePath)) {
// qDebug() << "File closed";
// closeHandle();
// return;
// }
// QString line = mTextStream.readLine(0);
// if (!line.isEmpty()) {
// qDebug() << line;
// }
// while (true) {
// line = mTextStream.readLine(0);
// if (!line.isEmpty()) {
// qDebug() << line;
// emit newLine(line);
// } else {
// break;
// }
// }
}
void WindowsFileWatch::directoryChanged()
{
qDebug() << "Directory content change detected";
// if (mHandle == nullptr) {
// if (PathFileExistsW(mWinApiFilePath)) {
// openFile();
// }
// }
}