win32_filetime 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/getdirtimes +1 -1
- data/bin/restoreoldtimes +20 -8
- data/bin/rolloldtimes +17 -10
- data/lib/{win32ft.rb → win32_filetime.rb} +18 -16
- data/lib/win32_filetime/version.rb +1 -1
- data/specs/win32ft.spec.rb +2 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b3074ff5192787372d2131ab493fffd452f1c52
|
4
|
+
data.tar.gz: 9e2cf84261950416a33ed0c257865fdbc1fb783c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02b71ce76429650880ae051315979ef099c554e7092dfd9f3e25038ef81770fe3fbc0e19c4b574d9a049b2625e310a503eb2c00d128532671ea6ac615f3647e9
|
7
|
+
data.tar.gz: f74d1195f76f3c76b99f866de35949403f690f08fe41248bd86c17d4cfd5774a08fcf359f63a6a53e869110da1870a23b1a7ff8b87f0bee74d70c34b5ea36dca
|
data/bin/getdirtimes
CHANGED
data/bin/restoreoldtimes
CHANGED
@@ -2,35 +2,47 @@
|
|
2
2
|
# encoding: GBK
|
3
3
|
|
4
4
|
require 'openssl'
|
5
|
-
require '
|
5
|
+
require 'win32_filetime'
|
6
6
|
W = Win32ft
|
7
7
|
|
8
8
|
trap "SIGINT" do
|
9
|
-
STDERR.puts "
|
9
|
+
STDERR.puts "\nexit on Ctrl-C."
|
10
10
|
exit 1
|
11
11
|
end
|
12
12
|
|
13
|
-
def rolloldtime(d1,
|
14
|
-
|
13
|
+
def rolloldtime(d1, logf)
|
14
|
+
logf = File.absolute_path(logf)
|
15
|
+
c_ds = 0
|
16
|
+
c_fs = 0
|
15
17
|
Dir.chdir(d1) do
|
16
|
-
File.foreach(
|
18
|
+
File.foreach(logf) do |line|
|
17
19
|
line.strip!
|
18
20
|
next if line.empty?
|
19
21
|
p1 = line.index(/ 0x\w+ 0x\w+ 0x\w+ \d+$/)
|
20
22
|
next if !p1
|
21
23
|
|
22
24
|
fn = line[0...p1]
|
23
|
-
next if
|
25
|
+
next if $just_dir && !File.directory?(fn)
|
26
|
+
if File.file?(fn)
|
27
|
+
c_fs += 1
|
28
|
+
elsif File.directory?(fn)
|
29
|
+
c_ds += 1
|
30
|
+
else
|
31
|
+
next
|
32
|
+
end
|
24
33
|
|
25
34
|
tc1,ta1,tm1,_sz1 = line[p1..-1].split
|
26
|
-
W.setfiletime(fn, tc1, ta1, tm1)
|
35
|
+
W.setfiletime(fn, tc1, ta1, tm1) rescue STDERR.puts "\n Error! #{fn}"
|
27
36
|
end
|
28
37
|
end
|
38
|
+
STDERR.puts " Restoreoldtimes \"#{d1}\" dirs: #{c_ds} files: #{c_fs}"
|
39
|
+
c_fs
|
29
40
|
end
|
30
41
|
|
31
42
|
def main
|
43
|
+
$just_dir = ARGV.delete('-o') ? true : false
|
32
44
|
if ARGV.size != 2
|
33
|
-
STDERR.puts "Syntax: restoreoldtimes.rb Dir1 file.log"
|
45
|
+
STDERR.puts "Syntax: restoreoldtimes.rb Dir1 file.log [ -o ] # -o just_dir "
|
34
46
|
exit 1
|
35
47
|
end
|
36
48
|
if !File.directory?(ARGV[0]) || !File.file?(ARGV[1])
|
data/bin/rolloldtimes
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# encoding: GBK
|
3
3
|
|
4
4
|
require 'openssl'
|
5
|
-
require '
|
5
|
+
require 'win32_filetime'
|
6
6
|
W = Win32ft
|
7
7
|
|
8
8
|
trap "SIGINT" do
|
@@ -20,15 +20,19 @@ def getmd5(fn)
|
|
20
20
|
md5.hexdigest
|
21
21
|
end
|
22
22
|
|
23
|
-
def rolloldtime(
|
24
|
-
|
25
|
-
|
23
|
+
def rolloldtime(dir_from, dir_to)
|
24
|
+
c_ds = 1
|
25
|
+
c_fs = 0
|
26
|
+
fs1 = Dir.chdir(dir_from) { Dir.glob '*' }
|
27
|
+
fs2 = Dir.chdir(dir_to) { Dir.glob '*' }
|
26
28
|
fs = fs1 & fs2
|
27
29
|
fs.each do |fn|
|
28
|
-
f1 = File.join
|
29
|
-
f2 = File.join
|
30
|
+
f1 = File.join dir_from,fn
|
31
|
+
f2 = File.join dir_to,fn
|
30
32
|
if File.directory?(f1) && File.directory?(f2)
|
31
|
-
rolloldtime(f1, f2)
|
33
|
+
_d1, _f1 = rolloldtime(f1, f2)
|
34
|
+
c_ds += _d1
|
35
|
+
c_fs += _f1
|
32
36
|
elsif File.file?(f1) && File.file?(f2)
|
33
37
|
begin
|
34
38
|
tc1, ta1, tm1, sz1 = W.getfiletime(f1, getsize: true)
|
@@ -50,22 +54,25 @@ def rolloldtime(d1, d2)
|
|
50
54
|
end
|
51
55
|
end
|
52
56
|
end
|
57
|
+
c_fs += 1
|
53
58
|
rescue Exception => e
|
54
59
|
STDERR.puts e
|
55
60
|
end
|
56
61
|
end
|
57
62
|
end
|
63
|
+
[c_ds, c_fs]
|
58
64
|
end
|
59
65
|
|
60
66
|
def main
|
61
67
|
if ARGV.size != 2
|
62
|
-
STDERR.puts "Syntax: rolloldtimes.rb
|
68
|
+
STDERR.puts "Syntax: rolloldtimes.rb dir_from dir_to"
|
63
69
|
exit 1
|
64
70
|
end
|
65
71
|
if !File.directory?(ARGV[0]) || !File.directory?(ARGV[1])
|
66
|
-
STDERR.puts "Syntax:
|
72
|
+
STDERR.puts "Syntax: Dir_from Dir_to must be directory"
|
67
73
|
end
|
68
|
-
rolloldtime(ARGV[0], ARGV[1])
|
74
|
+
c_ds, c_fs = rolloldtime(ARGV[0], ARGV[1])
|
75
|
+
STDERR.puts " Restoreoldtimes \"#{ARGV[0]}\" -> \"#{ARGV[1]}\". dirs: #{c_ds} files: #{c_fs}"
|
69
76
|
end
|
70
77
|
|
71
78
|
main
|
@@ -4,10 +4,10 @@
|
|
4
4
|
require "win32_filetime/version"
|
5
5
|
require "ffi"
|
6
6
|
|
7
|
-
class FileTime < FFI::Struct
|
7
|
+
class Win32Filetime::FileTime < FFI::Struct
|
8
8
|
layout :dwLowDateTime, :uint,
|
9
9
|
:dwHighDateTime, :uint
|
10
|
-
|
10
|
+
|
11
11
|
include Comparable
|
12
12
|
def <=>(other)
|
13
13
|
s1 = self[:dwHighDateTime] << 32 | self[:dwLowDateTime]
|
@@ -47,7 +47,7 @@ class FileTime < FFI::Struct
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
class SystemTime < FFI::Struct
|
50
|
+
class Win32Filetime::SystemTime < FFI::Struct
|
51
51
|
layout :wYear, :ushort,
|
52
52
|
:wMonth, :ushort,
|
53
53
|
:wDayOfWeek, :ushort,
|
@@ -88,7 +88,7 @@ class SystemTime < FFI::Struct
|
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
91
|
-
class Large_Integer < FFI::Struct
|
91
|
+
class Win32Filetime::Large_Integer < FFI::Struct
|
92
92
|
layout :LowPart, :uint,
|
93
93
|
:HighPart, :uint
|
94
94
|
|
@@ -118,11 +118,11 @@ class Large_Integer < FFI::Struct
|
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
121
|
-
class HANDLE < FFI::Struct
|
121
|
+
class Win32Filetime::HANDLE < FFI::Struct
|
122
122
|
layout :handle, :uint
|
123
123
|
end
|
124
124
|
|
125
|
-
module CFflag
|
125
|
+
module Win32Filetime::CFflag
|
126
126
|
GENERIC_READ = 0x80000000
|
127
127
|
GENERIC_WRITE = 0x40000000
|
128
128
|
GENERIC_EXECUTE = 0x20000000
|
@@ -153,7 +153,7 @@ module CFflag
|
|
153
153
|
INVALID_HANDLE_VALUE =0xFFFFFFFF
|
154
154
|
end
|
155
155
|
|
156
|
-
module FA
|
156
|
+
module Win32Filetime::FA
|
157
157
|
FILE_ATTRIBUTE_READONLY =0x00000001
|
158
158
|
FILE_ATTRIBUTE_HIDDEN =0x00000002
|
159
159
|
FILE_ATTRIBUTE_SYSTEM =0x00000004
|
@@ -171,15 +171,15 @@ module FA
|
|
171
171
|
FILE_ATTRIBUTE_VIRTUAL =0x00010000
|
172
172
|
end
|
173
173
|
|
174
|
-
module
|
174
|
+
module Win32Filetime
|
175
175
|
extend FFI::Library
|
176
176
|
ffi_lib 'msvcrt', 'kernel32'
|
177
177
|
ffi_convention :stdcall
|
178
|
-
|
178
|
+
|
179
179
|
attach_function :GetFileType, [:ulong], :int
|
180
180
|
attach_function :GetLastError, [], :uint
|
181
181
|
attach_function :FormatMessage, :FormatMessageA, [:uint, :pointer, :uint, :uint, :string, :uint, :pointer], :int
|
182
|
-
|
182
|
+
|
183
183
|
attach_function :FileTimeToLocalFileTime, [FileTime.by_ref, FileTime.by_ref], :bool
|
184
184
|
attach_function :LocalFileTimeToFileTime, [FileTime.by_ref, FileTime.by_ref], :bool
|
185
185
|
def self.ft2lft(ft)
|
@@ -192,7 +192,7 @@ module Win32ft
|
|
192
192
|
LocalFileTimeToFileTime(lft, ft)
|
193
193
|
ft
|
194
194
|
end
|
195
|
-
|
195
|
+
|
196
196
|
attach_function :FileTimeToSystemTime, [FileTime.by_ref, SystemTime.by_ref], :bool
|
197
197
|
attach_function :SystemTimeToFileTime, [SystemTime.by_ref, FileTime.by_ref], :bool
|
198
198
|
def self.ft2st(ft, convft2lft: false)
|
@@ -217,7 +217,7 @@ module Win32ft
|
|
217
217
|
ft = lft2ft(ft) if convlft2ft
|
218
218
|
ft
|
219
219
|
end
|
220
|
-
|
220
|
+
|
221
221
|
attach_function :GetSystemTime, [SystemTime.by_ref], :void
|
222
222
|
def self.getsystemtime
|
223
223
|
st = SystemTime.new
|
@@ -232,7 +232,7 @@ module Win32ft
|
|
232
232
|
end
|
233
233
|
attach_function :GetFileAttributes, :GetFileAttributesA, [:string], :uint
|
234
234
|
attach_function :SetFileAttributes, :SetFileAttributesA, [:string, :uint], :bool
|
235
|
-
|
235
|
+
|
236
236
|
=begin
|
237
237
|
CreateFile("", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)
|
238
238
|
CreateFile("", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)
|
@@ -244,7 +244,7 @@ CreateFile("", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTI
|
|
244
244
|
DWORD dwCreationDisposition, # CREATE_NEW / CREATE_ALWAYS / OPEN_EXISTING / OPEN_ALWAYS / TRUNCATE_EXISTING
|
245
245
|
DWORD dwFlagsAndAttributes, # 0 | FILE_FLAG_BACKUP_SEMANTICS if dir
|
246
246
|
HANDLE hTemplateFile # 0
|
247
|
-
|
247
|
+
|
248
248
|
ReadFile(
|
249
249
|
HANDLE,
|
250
250
|
buf, # FFI::MemoryPointer.new(:char, 100)
|
@@ -273,7 +273,7 @@ CloseHandle(HANDLE)
|
|
273
273
|
attach_function :DeleteFile, :DeleteFileA, [:string], :bool
|
274
274
|
attach_function :FlushFileBuffers, [:ulong], :bool
|
275
275
|
attach_function :CloseHandle, [:ulong], :bool
|
276
|
-
|
276
|
+
|
277
277
|
attach_function :GetFileTime, [:ulong, FileTime.by_ref, FileTime.by_ref, FileTime.by_ref], :bool
|
278
278
|
attach_function :SetFileTime, [:ulong, FileTime.by_ref, FileTime.by_ref, FileTime.by_ref], :bool
|
279
279
|
def self.getfiletime(fn, getsize: false)
|
@@ -324,7 +324,7 @@ CloseHandle(HANDLE)
|
|
324
324
|
tt = (wintt - 116444736000000000) / 10**7.0
|
325
325
|
tt
|
326
326
|
end
|
327
|
-
|
327
|
+
|
328
328
|
attach_function :GetFileSizeEx, [:ulong, Large_Integer.by_ref], :bool
|
329
329
|
def self.getfilesize(fn)
|
330
330
|
hf = CreateFile(fn, CFflag::GENERIC_READ, CFflag::FILE_SHARE_READ | CFflag::FILE_SHARE_WRITE,
|
@@ -337,3 +337,5 @@ CloseHandle(HANDLE)
|
|
337
337
|
size.to_i
|
338
338
|
end
|
339
339
|
end
|
340
|
+
|
341
|
+
Win32ft = Win32Filetime
|
data/specs/win32ft.spec.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: win32_filetime
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- windwiny
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -70,8 +70,8 @@ files:
|
|
70
70
|
- bin/getdirtimes
|
71
71
|
- bin/restoreoldtimes
|
72
72
|
- bin/rolloldtimes
|
73
|
+
- lib/win32_filetime.rb
|
73
74
|
- lib/win32_filetime/version.rb
|
74
|
-
- lib/win32ft.rb
|
75
75
|
- specs/win32ft.spec.rb
|
76
76
|
- win32_filetime.gemspec
|
77
77
|
homepage: https://github.com/windwiny/win32_filetime.git
|
@@ -94,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
94
94
|
version: '0'
|
95
95
|
requirements: []
|
96
96
|
rubyforge_project:
|
97
|
-
rubygems_version: 2.
|
97
|
+
rubygems_version: 2.2.2
|
98
98
|
signing_key:
|
99
99
|
specification_version: 4
|
100
100
|
summary: win32 filetime api.
|