Подкиньте примерчик по MoveFileW пожалуйста.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Подкиньте примерчик по MoveFileW пожалуйста.

Сообщение Pantalone » 09.10.2007 (Вт) 1:23

У меня MoveFile отказалась работать с парой файлов у которых витиеватые имена с крякозябрами. Попробовал сабж, так она вообще не один файл не переименовала, выдает 0.
Поделитесь работающим примерчиком с сабжем.
Заранее спасибо.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 09.10.2007 (Вт) 6:56

Лучше подскажи, как ты пробовал.
З.Ы. Правильные способы пробанья:
1. Через TLB
2. Через передачу указателей на массивы байтов вместо строк.
3. Через передачу указателей на строки.

ADD: Поправлен пункт 2 во избежание введения в заблуждение.
Последний раз редактировалось Viper 10.10.2007 (Ср) 7:29, всего редактировалось 1 раз.
Весь мир матрица, а мы в нем потоки байтов!

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 09.10.2007 (Вт) 12:27

Это к чему из перечисленного относится?

Код: Выделить всё
Public Declare Function MoveFile Lib "kernel32" Alias "MoveFileW" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String) As Long

MoveFile OldFile, NewFile

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 09.10.2007 (Вт) 12:48

Это относится к неправильному пониманию смысла быуквы W в названии API-функции. Стоит почитать например Эппельмана для того чтобы это прочувствовать. Да и здесь, на форуме, сия тема поднимлась неоднократно.

З.Ы. Подсказка: VB фиолетово, какая буква в алиасе, он все равно строку преобразует в ANSI-строку и ее то и передаст в вызываемую функцию. Это верно для твоего выарианта объявления функции.
Весь мир матрица, а мы в нем потоки байтов!

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 09.10.2007 (Вт) 12:54

У меня MoveFile отказалась работать с парой файлов у которых витиеватые имена с крякозябрами.


Может стоит привести имена этих витиеватых файлов?

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 09.10.2007 (Вт) 14:10

Имена такие:

▼▲Θ٤۝₪_UNICODEs
Apostate Café » VB format() function.htm

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 09.10.2007 (Вт) 14:25

Viper

Пункт 2 не совсем ясен.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 09.10.2007 (Вт) 14:27

В декларации указать Long, а при вызове arrText(0).
Lasciate ogni speranza, voi ch'entrate.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 09.10.2007 (Вт) 14:29

Что за глупость?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 09.10.2007 (Вт) 14:59

Собственно пункт 2 аналогичен пункту 3, но вместо строки используем массив байт и передаем указатель на первый элемент массива. Иногда бывает удобнее третьего варианта.
В обоих случаях объявление будет такое:

Код: Выделить всё
Public Declare Function MoveFile Lib "kernel32" Alias "MoveFileW" (ByVal lpExistingFileName As Long, ByVal lpNewFileName As Long) As Long


а юзанье со строками:
Код: Выделить всё
MoveFile StrPtr(sOld), StrPtr(sNew)


с массивами байт:
Код: Выделить всё
MoveFile VarPtr(arsOld(0)), VarrPtr(arsNew(0))
Весь мир матрица, а мы в нем потоки байтов!

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 09.10.2007 (Вт) 16:49

Что-то намудрили вы тут. MoveFileA например преспокойно работает с обычными строками. MoveFileW тоже кстати, не работает только с теми что я привел.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 09.10.2007 (Вт) 17:26

Viper
Ну только тогда не "Через передачу массивов байтов вместо строк.", а "Через передачу указателя на массиввы байтов вместо указателей на строки". А по сути, пункты 2 и 3 - одинаковы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 09.10.2007 (Вт) 17:45

Кстати, fso прекрасно справилось с задачей. Подскажите тогда, fso будет работать на каждом компе с системой выше 2000 винды или же есть какие-то грабли? Вопрос такой возник поскольку софтина будет работать на нескольких компах. И непонятно будет ли FSO работать на всех компах или же есть какие-то грабли, типа возможность FSO отключена политиками или еще как-то. Сорри если вопрос глупый, но видел часто рекомендации что лучне не использовать FSO, потому как не везде может прокатить.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 09.10.2007 (Вт) 17:57

Pantalone
MoveFileW тоже справляется с задачей отлично. Надо просто уметь его готовить.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 09.10.2007 (Вт) 18:02

Хакер
У меня не работает. Да и советы не особенно помогли, так что остается FSO. Если заработает на других компах, или я с WMI путаю?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 09.10.2007 (Вт) 18:05

Ты неправильно работает (работаешь, чёрт, ну как меня угораздило в очередной раз написать такую дрянь) с функцией, потому она и не работает. Ты же пытаешься вместо того чтобы исправиться, искать новые способы.
Последний раз редактировалось Хакер 09.10.2007 (Вт) 19:53, всего редактировалось 1 раз.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 09.10.2007 (Вт) 19:50

Когда помощи ждать не от кого, приходится искать новые способы.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 09.10.2007 (Вт) 19:54

помощи ждать не от кого

Это не соответствует действительности.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 09.10.2007 (Вт) 19:57

Кстати, fso прекрасно справилось с задачей. Подскажите тогда, fso будет работать на каждом компе с системой выше 2000 винды или же есть какие-то грабли?


Да будет, FSO это часть Windows Script Host, а он, есть во всех ОС старше Win2000.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 09.10.2007 (Вт) 20:51

jangle
FSO, кстати, справилось не через переименование как таковое:

Это не прокатило:

Код: Выделить всё
fso.MoveFile OldFile, NewFile


И это не прокатило

Код: Выделить всё
Dim fso As FileSystemObject
Dim fil As Scripting.File

Set fso = New FileSystemObject
Set fil = fso.GetFile(OldFile) 'тут происходит затык

fil.Move(NewFile)


Прокатило другое, а именно fil.Name, но способ получения fil просто кашмарный - перебором всех файлов через FSO, напрямую никак.

Хакер
Это не соответствует действительности.

Я просил помощи, а не нравоучений и пустой демагогии.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 10.10.2007 (Ср) 7:30

Pantalone, как это не помогли? И способы общения с MoveFileW привели, и даже объявление с примером использования. Это не помогли? Нды...
Весь мир матрица, а мы в нем потоки байтов!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.10.2007 (Ср) 8:57

Pantalone писал(а):Я просил помощи, а не нравоучений и пустой демагогии.

Ты просил не помощи, ты просил, чтобы за тебя все сделали.
Viper дал исчерпывающий ответ, надо лишь немного подумать, чтобы применить его в своей ситуации.
Lasciate ogni speranza, voi ch'entrate.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 10.10.2007 (Ср) 14:43

alibek писал(а):Ты просил не помощи, ты просил, чтобы за тебя все сделали.

Именно это я и просил, чтобы все сделали, разве так много попросил, неужели это сопоставимо с просьбой написать дзоровенный умопомрачительный алгоритм? И разве нельзя назвать это помощью?
На зарубежных форумах народ гораздо сговорчивее и доброжелательнее, чего и вам желаю.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.10.2007 (Ср) 15:03

Знаешь пословицу про рыбу и сеть? Помощь -- это как раз алгоритм.
Lasciate ogni speranza, voi ch'entrate.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 10.10.2007 (Ср) 15:22

Pantalone, ты пришел с вопросом о переименовании файлов через MoveFileW. Стало быть, ты знаешь, что есть такая функция. Дальше ты пишешь, что она нефига не переименовывает, выдает 0. Отсюда получаем предположение, что ты не знаешь нюанса с преобразованием Unicode-строки в ANSI-строку, которое далает VB при вызове API-функций. Однако просишь пример юзанья функции. Тебя спрашивают, как же ты ее объявил то (ибо какой тут пример, все элементарно до невозмжности)? А также намекают как же ее (эту функцию) надо правильно использовать. Предположение о неправильном объявлении оказывается верным, на что тебе и указывают. Эффекту однако все равно нет. Наконец тебе таки дается полный пример объявления и использования. А ты всяко пишешь, что тебе не помогли. И что это за подход такой?
Весь мир матрица, а мы в нем потоки байтов!

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 10.10.2007 (Ср) 17:54

Viper
Закрутился просто, работы вагон, не всегда удается упомнить на чем собственно остановился :)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 37

    TopList